From 919be490f9cbb2dc769b2c84e6715aee047ddbe5 Mon Sep 17 00:00:00 2001 From: Maksim Gamarnik Date: Tue, 10 Nov 2015 13:49:24 +0200 Subject: [PATCH] Update Sync all Minetest commits --- .gitignore | 94 +- .travis.yml | 1 + CMakeLists.txt | 6 +- ... notice on adbs and 4hunger mods (ENG).txt | 16 - ... notice on adbs and 4hunger mods (RUS).txt | 16 - adbs_4hunger_permission_state.txt | 10 - build/android/Makefile | 335 +- build/android/jni/Android.mk | 28 +- build/android/libiconv_android.patch | 39 + build/android/libiconv_stdio.patch | 13 + build/android/libs/wversionmanager-1.3.jar | Bin 0 -> 10769 bytes .../src/mobi/MultiCraft/MCNativeActivity.java | 24 +- builtin/common/filterlist.lua | 2 +- builtin/common/misc_helpers.lua | 87 +- builtin/common/strict.lua | 14 +- builtin/fstk/buttonbar.lua | 56 +- builtin/fstk/dialog.lua | 10 +- builtin/fstk/tabview.lua | 36 +- builtin/fstk/ui.lua | 85 +- builtin/game/auth.lua | 1 + builtin/game/chatcommands.lua | 97 +- builtin/game/deprecated.lua | 16 +- builtin/game/detached_inventory.lua | 1 + builtin/game/falling.lua | 16 +- builtin/game/features.lua | 6 +- builtin/game/init.lua | 2 +- builtin/game/item.lua | 30 +- builtin/game/item_entity.lua | 16 +- builtin/game/misc.lua | 115 +- builtin/game/register.lua | 70 +- builtin/init.lua | 2 +- builtin/mainmenu/common.lua | 95 +- builtin/mainmenu/dlg_config_world.lua | 2 +- builtin/mainmenu/dlg_create_world.lua | 2 +- builtin/mainmenu/dlg_delete_mod.lua | 2 +- builtin/mainmenu/dlg_delete_world.lua | 2 +- builtin/mainmenu/dlg_rename_modpack.lua | 2 +- builtin/mainmenu/gamemgr.lua | 2 +- builtin/mainmenu/init.lua | 2 +- builtin/mainmenu/modmgr.lua | 2 +- builtin/mainmenu/store.lua | 2 +- builtin/mainmenu/tab_credits.lua | 94 +- builtin/mainmenu/tab_mods.lua | 7 +- builtin/mainmenu/tab_multiplayer.lua | 2 +- builtin/mainmenu/tab_server.lua | 61 +- builtin/mainmenu/tab_settings.lua | 1065 ++-- builtin/mainmenu/tab_simple_main.lua | 2 +- builtin/mainmenu/tab_singleplayer.lua | 70 +- builtin/mainmenu/tab_texturepacks.lua | 20 +- builtin/mainmenu/textures.lua | 33 +- builtin/settingtypes.txt | 993 ++++ .../minimap_shader/opengl_fragment.glsl | 32 + .../shaders/minimap_shader/opengl_vertex.glsl | 11 + .../shaders/nodes_shader/opengl_fragment.glsl | 150 +- .../shaders/nodes_shader/opengl_vertex.glsl | 129 +- .../water_surface_shader/opengl_fragment.glsl | 62 +- .../water_surface_shader/opengl_vertex.glsl | 17 +- .../wielded_shader/opengl_fragment.glsl | 114 + .../shaders/wielded_shader/opengl_vertex.glsl | 35 + cmake/Modules/FindJson.cmake | 2 +- doc/Doxyfile.in | 2 + doc/Readme.txt | 187 +- doc/lua_api.txt | 231 +- doc/menu_lua_api.txt | 8 +- doc/{mapformat.txt => world_format.txt} | 44 +- misc/minetest.desktop | 4 +- misc/minetest.svg | 183 + multicraft.conf.example | 1701 +++++-- po/be/minetest.po | 3731 +++++++++++--- po/cs/minetest.po | 4224 ++++++++++++---- po/da/minetest.po | 4053 ++++++++++++--- po/de/minetest.po | 4372 ++++++++++++---- po/eo/minetest.po | 3587 +++++++++++++ po/es/minetest.po | 4164 +++++++++++---- po/et/minetest.po | 4171 +++++++++++---- po/fr/minetest.po | 4330 ++++++++++++---- po/hu/minetest.po | 4267 ++++++++++++---- po/id/minetest.po | 4083 ++++++++++++--- po/it/minetest.po | 4167 +++++++++++---- po/ja/minetest.po | 4209 ++++++++++++---- po/jbo/minetest.po | 3478 +++++++++++++ po/ko/minetest.po | 3760 +++++++++++--- po/ky/minetest.po | 4053 ++++++++++++--- po/lt/minetest.po | 3998 ++++++++++++--- po/minetest.pot | 2988 +++++++++-- po/nb/minetest.po | 3836 +++++++++++--- po/nl/minetest.po | 4336 ++++++++++++---- po/pl/minetest.po | 4291 ++++++++++++---- po/pt/minetest.po | 4208 ++++++++++++---- po/pt_BR/minetest.po | 4267 ++++++++++++---- po/ro/minetest.po | 4189 ++++++++++++---- po/ru/minetest.po | 4316 ++++++++++++---- po/tr/minetest.po | 4461 ++++++++++++----- po/uk/minetest.po | 4304 ++++++++++++---- po/zh_CN/minetest.po | 4268 ++++++++++++---- po/zh_TW/minetest.po | 3578 +++++++++++++ src/CMakeLists.txt | 51 +- src/areastore.cpp | 343 ++ src/areastore.h | 196 + src/ban.cpp | 20 +- src/ban.h | 8 +- src/basicmacros.h | 46 + src/camera.cpp | 55 +- src/camera.h | 1 - src/cavegen.cpp | 473 +- src/cavegen.h | 54 +- src/chat.cpp | 4 +- src/client.cpp | 169 +- src/client.h | 53 +- src/client/clientlauncher.cpp | 58 +- src/client/clientlauncher.h | 12 +- src/client/inputhandler.h | 21 +- src/client/tile.cpp | 122 +- src/client/tile.h | 29 +- src/clientiface.cpp | 46 +- src/clientiface.h | 17 +- src/clientmap.cpp | 30 +- src/clientmap.h | 4 +- src/clientobject.cpp | 2 +- src/clientobject.h | 1 + src/clouds.cpp | 21 +- src/clouds.h | 3 + src/cmake_config.h.in | 2 + src/collision.cpp | 186 +- src/collision.h | 13 +- src/config.h | 4 +- src/constants.h | 4 +- src/content_cao.cpp | 132 +- src/content_cao.h | 6 +- src/content_mapblock.cpp | 258 +- src/content_mapnode.cpp | 80 - src/content_mapnode.h | 7 - src/content_nodemeta.cpp | 14 +- src/content_nodemeta.h | 4 +- src/content_sao.cpp | 110 +- src/content_sao.h | 18 +- src/craftdef.cpp | 242 +- src/craftdef.h | 20 +- src/database-leveldb.cpp | 4 +- src/database-redis.cpp | 28 +- src/database-sqlite3.cpp | 2 +- src/debug.cpp | 166 +- src/debug.h | 57 +- src/defaultsettings.cpp | 57 +- src/drawscene.cpp | 11 +- src/drawscene.h | 16 +- src/dungeongen.cpp | 207 +- src/emerge.cpp | 777 +-- src/emerge.h | 115 +- src/environment.cpp | 318 +- src/environment.h | 45 +- src/event_manager.h | 8 +- src/exceptions.h | 6 + src/filesys.cpp | 4 +- src/filesys.h | 2 + src/fontengine.cpp | 5 +- src/fontengine.h | 2 +- src/game.cpp | 282 +- src/game.h | 1 + src/gameparams.h | 9 +- src/genericobject.cpp | 8 +- src/genericobject.h | 26 +- src/gettext.cpp | 136 +- src/gettext.h | 18 +- src/guiEngine.cpp | 33 +- src/guiFileSelectMenu.cpp | 4 +- src/guiFormSpecMenu.cpp | 519 +- src/guiFormSpecMenu.h | 38 +- src/guiKeyChangeMenu.cpp | 14 +- src/guiMainMenu.h | 31 +- src/guiPasswordChange.cpp | 4 +- src/guiTable.cpp | 53 +- src/guiscalingfilter.cpp | 4 +- src/httpfetch.cpp | 42 +- src/hud.cpp | 12 +- src/hud.h | 12 +- src/intlGUIEditBox.cpp | 1509 ++++++ src/intlGUIEditBox.h | 178 + src/inventory.cpp | 64 +- src/inventory.h | 8 +- src/inventorymanager.cpp | 295 +- src/inventorymanager.h | 48 +- src/irrlichttypes.h | 15 + src/itemdef.cpp | 12 +- src/jthread/CMakeLists.txt | 14 - src/jthread/jevent.h | 59 - src/jthread/jmutex.h | 79 - src/jthread/jmutexautolock.h | 43 - src/jthread/jthread.h | 117 - src/jthread/pthread/jevent.cpp | 67 - src/jthread/pthread/jmutex.cpp | 58 - src/jthread/pthread/jthread.cpp | 168 - src/jthread/win32/jevent.cpp | 43 - src/jthread/win32/jmutex.cpp | 68 - src/jthread/win32/jthread.cpp | 146 - src/keycode.cpp | 6 +- src/localplayer.cpp | 99 +- src/localplayer.h | 7 +- src/log.cpp | 469 +- src/log.h | 209 +- src/main.cpp | 152 +- src/map.cpp | 505 +- src/map.h | 12 +- src/mapblock.cpp | 147 +- src/mapblock.h | 41 +- src/mapblock_mesh.cpp | 147 +- src/mapblock_mesh.h | 17 +- src/mapgen.cpp | 111 +- src/mapgen.h | 12 +- src/mapgen_fractal.cpp | 640 +++ src/mapgen_fractal.h | 141 + src/mapgen_singlenode.cpp | 3 +- src/mapgen_singlenode.h | 2 +- src/mapgen_v5.cpp | 120 +- src/mapgen_v5.h | 14 +- src/mapgen_v6.cpp | 39 +- src/mapgen_v6.h | 18 +- src/mapgen_v7.cpp | 190 +- src/mapgen_v7.h | 17 +- src/mapnode.cpp | 50 +- src/mapsector.cpp | 37 +- src/mapsector.h | 28 +- src/mesh.cpp | 103 +- src/mesh.h | 6 + src/mg_biome.cpp | 15 +- src/mg_decoration.cpp | 37 +- src/mg_decoration.h | 3 +- src/mg_ore.cpp | 119 +- src/mg_ore.h | 31 +- src/minimap.cpp | 560 +++ src/minimap.h | 158 + src/mods.cpp | 5 +- src/mods.h | 18 - src/nameidmapping.cpp | 2 +- src/network/clientpackethandler.cpp | 102 +- src/network/connection.cpp | 241 +- src/network/connection.h | 70 +- src/network/networkpacket.cpp | 137 +- src/network/networkpacket.h | 13 +- src/network/networkprotocol.h | 64 +- src/network/serverpackethandler.cpp | 93 +- src/nodedef.cpp | 71 +- src/nodedef.h | 8 + src/nodemetadata.cpp | 32 +- src/nodemetadata.h | 7 +- src/nodetimer.cpp | 24 +- src/noise.cpp | 52 +- src/objdef.h | 4 + src/object_properties.cpp | 7 +- src/object_properties.h | 2 +- src/particles.cpp | 22 +- src/particles.h | 4 +- src/pathfinder.cpp | 8 +- src/player.cpp | 53 +- src/player.h | 76 +- src/porting.cpp | 197 +- src/porting.h | 117 +- src/porting_android.cpp | 44 +- src/profiler.h | 20 +- src/quicktune.cpp | 14 +- src/rollback.cpp | 10 +- src/rollback_interface.cpp | 3 +- src/script/common/c_content.cpp | 84 +- src/script/common/c_content.h | 76 +- src/script/common/c_converter.h | 4 +- src/script/common/c_internal.cpp | 116 +- src/script/common/c_internal.h | 42 +- src/script/common/c_types.h | 4 +- src/script/cpp_api/s_async.cpp | 100 +- src/script/cpp_api/s_async.h | 30 +- src/script/cpp_api/s_base.cpp | 138 +- src/script/cpp_api/s_base.h | 41 +- src/script/cpp_api/s_entity.cpp | 56 +- src/script/cpp_api/s_env.cpp | 13 +- src/script/cpp_api/s_internal.h | 6 +- src/script/cpp_api/s_inventory.cpp | 42 +- src/script/cpp_api/s_item.cpp | 40 +- src/script/cpp_api/s_mainmenu.cpp | 22 +- src/script/cpp_api/s_mainmenu.h | 11 +- src/script/cpp_api/s_node.cpp | 56 +- src/script/cpp_api/s_nodemeta.cpp | 45 +- src/script/cpp_api/s_player.cpp | 39 +- src/script/cpp_api/s_player.h | 1 + src/script/cpp_api/s_security.cpp | 15 +- src/script/cpp_api/s_server.cpp | 22 +- src/script/lua_api/CMakeLists.txt | 1 + src/script/lua_api/l_areastore.cpp | 402 ++ src/script/lua_api/l_areastore.h | 70 + src/script/lua_api/l_base.cpp | 4 +- src/script/lua_api/l_craft.cpp | 15 +- src/script/lua_api/l_env.cpp | 105 +- src/script/lua_api/l_env.h | 18 +- src/script/lua_api/l_internal.h | 22 +- src/script/lua_api/l_inventory.cpp | 3 +- src/script/lua_api/l_mainmenu.cpp | 71 +- src/script/lua_api/l_mainmenu.h | 2 - src/script/lua_api/l_mapgen.cpp | 158 +- src/script/lua_api/l_mapgen.h | 4 + src/script/lua_api/l_nodemeta.cpp | 21 +- src/script/lua_api/l_nodetimer.cpp | 6 + src/script/lua_api/l_noise.cpp | 11 +- src/script/lua_api/l_object.cpp | 286 +- src/script/lua_api/l_object.h | 5 +- src/script/lua_api/l_particles.cpp | 220 +- src/script/lua_api/l_rollback.cpp | 4 + src/script/lua_api/l_server.cpp | 44 +- src/script/lua_api/l_server.h | 8 +- src/script/lua_api/l_util.cpp | 87 +- src/script/lua_api/l_util.h | 7 +- src/script/lua_api/l_vmanip.cpp | 32 +- src/script/scripting_game.cpp | 6 +- src/script/scripting_game.h | 2 +- src/script/scripting_mainmenu.cpp | 2 +- src/serialization.h | 12 +- src/server.cpp | 737 ++- src/server.h | 59 +- src/serverlist.cpp | 4 +- src/serverobject.cpp | 2 +- src/serverobject.h | 10 +- src/settings.cpp | 38 +- src/settings.h | 8 +- src/settings_translation_file.cpp | 511 ++ src/shader.cpp | 88 +- src/socket.cpp | 5 +- src/sound_openal.cpp | 14 +- src/staticobject.cpp | 14 +- src/staticobject.h | 2 +- src/subgame.cpp | 50 +- src/threading/CMakeLists.txt | 6 + src/threading/atomic.h | 96 + src/threading/event.h | 57 + src/threading/mutex.cpp | 83 + src/threading/mutex.h | 69 + .../mutex_auto_lock.h} | 44 +- src/threading/semaphore.cpp | 162 + .../jsemaphore.h => threading/semaphore.h} | 51 +- src/threading/thread.cpp | 439 ++ src/threading/thread.h | 169 + src/threads.h | 69 +- src/tool.cpp | 10 +- src/touchscreengui.cpp | 17 +- src/touchscreengui.h | 2 +- src/treegen.cpp | 16 +- src/unittest/CMakeLists.txt | 2 + src/unittest/test.cpp | 18 +- src/unittest/test.h | 87 +- src/unittest/test_areastore.cpp | 129 + src/unittest/test_mapnode.cpp | 2 - src/unittest/test_random.cpp | 3 + src/unittest/test_serialization.cpp | 507 +- src/unittest/test_threading.cpp | 182 + src/unittest/test_utilities.cpp | 45 +- src/util/auth.cpp | 11 +- src/util/auth.h | 2 +- src/{logoutputbuffer.h => util/auth.h~HEAD} | 55 +- src/util/container.h | 240 +- src/util/numeric.cpp | 4 + src/util/numeric.h | 13 +- src/util/pointer.h | 8 + src/util/serialize.cpp | 366 +- src/util/serialize.h | 801 +-- src/util/sha256.c | 4 +- src/util/srp.cpp | 226 +- src/util/srp.h | 31 +- src/util/string.cpp | 149 +- src/util/string.h | 29 +- src/util/thread.h | 159 +- src/version.cpp | 1 + src/voxel.cpp | 138 - src/wieldmesh.cpp | 38 +- src/wieldmesh.h | 3 + textures/base/pack/ad_label1.png | Bin 15009 -> 0 bytes textures/base/pack/ad_label10.png | Bin 32591 -> 0 bytes textures/base/pack/ad_label11.png | Bin 28740 -> 0 bytes textures/base/pack/ad_label2.png | Bin 18132 -> 0 bytes textures/base/pack/ad_label3.png | Bin 12583 -> 0 bytes textures/base/pack/ad_label4.png | Bin 19744 -> 0 bytes textures/base/pack/ad_label5.png | Bin 24720 -> 0 bytes textures/base/pack/ad_label6.png | Bin 25092 -> 0 bytes textures/base/pack/ad_label7.png | Bin 21230 -> 0 bytes textures/base/pack/ad_label8.png | Bin 17618 -> 0 bytes textures/base/pack/ad_label9.png | Bin 23135 -> 0 bytes textures/base/pack/camera_btn.png | Bin 0 -> 729 bytes textures/base/pack/chat_btn.png | Bin 550 -> 485 bytes textures/base/pack/inventory_btn.png | Bin 471 -> 435 bytes textures/base/pack/minimap_mask_round.png | Bin 0 -> 1858 bytes textures/base/pack/minimap_mask_square.png | Bin 0 -> 396 bytes textures/base/pack/minimap_overlay_round.png | Bin 0 -> 13105 bytes textures/base/pack/minimap_overlay_square.png | Bin 0 -> 1686 bytes textures/base/pack/no_screenshot.png | Bin 95 -> 82 bytes textures/base/pack/player_marker.png | Bin 0 -> 2178 bytes textures/base/pack/rangeview_btn.png | Bin 721 -> 684 bytes util/buildbot/toolchain_mingw64.cmake | 8 +- util/updatepo.sh | 3 +- 394 files changed, 113621 insertions(+), 30202 deletions(-) delete mode 100644 License notice on adbs and 4hunger mods (ENG).txt delete mode 100644 License notice on adbs and 4hunger mods (RUS).txt delete mode 100644 adbs_4hunger_permission_state.txt create mode 100644 build/android/libiconv_android.patch create mode 100644 build/android/libiconv_stdio.patch create mode 100644 build/android/libs/wversionmanager-1.3.jar create mode 100644 builtin/settingtypes.txt create mode 100644 client/shaders/minimap_shader/opengl_fragment.glsl create mode 100644 client/shaders/minimap_shader/opengl_vertex.glsl create mode 100644 client/shaders/wielded_shader/opengl_fragment.glsl create mode 100644 client/shaders/wielded_shader/opengl_vertex.glsl rename doc/{mapformat.txt => world_format.txt} (88%) create mode 100644 misc/minetest.svg create mode 100644 po/eo/minetest.po create mode 100644 po/jbo/minetest.po create mode 100644 po/zh_TW/minetest.po create mode 100644 src/areastore.cpp create mode 100644 src/areastore.h create mode 100644 src/basicmacros.h create mode 100644 src/intlGUIEditBox.cpp create mode 100644 src/intlGUIEditBox.h delete mode 100644 src/jthread/CMakeLists.txt delete mode 100644 src/jthread/jevent.h delete mode 100644 src/jthread/jmutex.h delete mode 100644 src/jthread/jmutexautolock.h delete mode 100644 src/jthread/jthread.h delete mode 100644 src/jthread/pthread/jevent.cpp delete mode 100644 src/jthread/pthread/jmutex.cpp delete mode 100644 src/jthread/pthread/jthread.cpp delete mode 100644 src/jthread/win32/jevent.cpp delete mode 100644 src/jthread/win32/jmutex.cpp delete mode 100755 src/jthread/win32/jthread.cpp create mode 100644 src/mapgen_fractal.cpp create mode 100644 src/mapgen_fractal.h create mode 100644 src/minimap.cpp create mode 100644 src/minimap.h create mode 100644 src/script/lua_api/l_areastore.cpp create mode 100644 src/script/lua_api/l_areastore.h create mode 100644 src/settings_translation_file.cpp create mode 100644 src/threading/CMakeLists.txt create mode 100644 src/threading/atomic.h create mode 100644 src/threading/event.h create mode 100644 src/threading/mutex.cpp create mode 100644 src/threading/mutex.h rename src/{jthread/LICENSE.MIT => threading/mutex_auto_lock.h} (52%) create mode 100644 src/threading/semaphore.cpp rename src/{jthread/jsemaphore.h => threading/semaphore.h} (57%) create mode 100644 src/threading/thread.cpp create mode 100644 src/threading/thread.h create mode 100644 src/unittest/test_areastore.cpp create mode 100644 src/unittest/test_threading.cpp rename src/{logoutputbuffer.h => util/auth.h~HEAD} (51%) delete mode 100644 textures/base/pack/ad_label1.png delete mode 100644 textures/base/pack/ad_label10.png delete mode 100644 textures/base/pack/ad_label11.png delete mode 100644 textures/base/pack/ad_label2.png delete mode 100644 textures/base/pack/ad_label3.png delete mode 100644 textures/base/pack/ad_label4.png delete mode 100644 textures/base/pack/ad_label5.png delete mode 100644 textures/base/pack/ad_label6.png delete mode 100644 textures/base/pack/ad_label7.png delete mode 100644 textures/base/pack/ad_label8.png delete mode 100644 textures/base/pack/ad_label9.png create mode 100644 textures/base/pack/camera_btn.png create mode 100644 textures/base/pack/minimap_mask_round.png create mode 100644 textures/base/pack/minimap_mask_square.png create mode 100644 textures/base/pack/minimap_overlay_round.png create mode 100644 textures/base/pack/minimap_overlay_square.png create mode 100644 textures/base/pack/player_marker.png diff --git a/.gitignore b/.gitignore index 4ef6d733..1fc29fca 100644 --- a/.gitignore +++ b/.gitignore @@ -1,26 +1,48 @@ -## Generic ignorable patterns and files +## Editors and Development environments *~ -.*.swp -.*-swp -*bak* -tags -*.vim +*.swp +*.bak* *.orig -*.rej +# Vim +*.vim +# Kate +.*.kate-swp +.swp.* +# KDevelop4 +.kdev4/ +*.kdev4 +# Eclipse (CDT and LDT) +.project +.cproject +.settings/ +.buildpath +.metadata +# GNU Global +tags +!tags/ +gtags.files ## Files related to MultiCraft development cycle /*.patch +# GNU Patch reject file +*.rej -## Non-static MultiCraft directories + +## Non-static MultiCraft directories or symlinks to these /bin/ /games/* !/games/MultiCraft_game/ -/cache/ +/cache /textures/* !/textures/base/ -/sounds/ +/screenshots +/sounds /mods/* -/worlds/ +!/mods/minetest/ +/mods/minetest/* +!/mods/minetest/mods_here.txt +/worlds +/world/ ## Configuration/log files minetest.conf @@ -33,51 +55,24 @@ doc/html/ doc/doxygen_* ## Build files -CMakeFiles/* -src/CMakeFiles/* -src/Makefile -src/android_version.h -src/cmake_config.h -src/cmake_config_githash.h -src/cmake_install.cmake -src/script/CMakeFiles/* -src/script/common/CMakeFiles/* -src/script/cpp_api/CMakeFiles/* -src/script/lua_api/CMakeFiles/* -src/util/CMakeFiles/* -src/unittest/CMakeFiles/* -src/jthread/CMakeFiles/* -src/jthread/Makefile -src/jthread/cmake_config.h -src/jthread/cmake_install.cmake -src/jthread/libjthread.a -src/json/libjson.a -src/lua/build/ -src/lua/CMakeFiles/ -src/cguittfont/CMakeFiles/ -src/cguittfont/libcguittfont.a -src/cguittfont/cmake_install.cmake -src/cguittfont/Makefile -src/gmp/CMakeFiles/ -src/gmp/libgmp.a -src/json/CMakeFiles/ -src/json/libjsoncpp.a -src/sqlite/CMakeFiles/* -src/sqlite/libsqlite3.a -src/client/CMakeFiles/ -src/network/CMakeFiles/ +CMakeFiles +Makefile +!build/android/Makefile +cmake_install.cmake CMakeCache.txt CPackConfig.cmake CPackSourceConfig.cmake -Makefile -cmake_install.cmake +src/android_version.h +src/android_version_githash.h +src/cmake_config.h +src/cmake_config_githash.h +src/lua/build/ locale/ .directory -.kdev4/ *.cbp -*.kdev4 *.layout *.o +*.a ## Android build files build/android/assets @@ -90,5 +85,6 @@ build/android/jni/src ##build/android/libs build/android/obj build/android/path.cfg +build/android/and_env build/android/AndroidManifest.xml -timestamp \ No newline at end of file +timestamp diff --git a/.travis.yml b/.travis.yml index d17af546..d7ee2387 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,7 @@ env: - PLATFORM=Linux before_install: ./util/travis/before_install.sh script: ./util/travis/script.sh +sudo: required notifications: email: false matrix: diff --git a/CMakeLists.txt b/CMakeLists.txt index 133babdd..a6d68173 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,7 +54,7 @@ endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") -# This is done here so that relative search paths are more reasnable +# This is done here so that relative search paths are more reasonable find_package(Irrlicht) @@ -171,14 +171,14 @@ install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/fonts" DESTINATION "${SHAREDIR}") install(FILES "README.txt" DESTINATION "${DOCDIR}") install(FILES "doc/lua_api.txt" DESTINATION "${DOCDIR}") install(FILES "doc/menu_lua_api.txt" DESTINATION "${DOCDIR}") -install(FILES "doc/mapformat.txt" DESTINATION "${DOCDIR}") +install(FILES "doc/world_format.txt" DESTINATION "${DOCDIR}") install(FILES "multicraft.conf.example" DESTINATION "${EXAMPLE_CONF_DIR}") if(UNIX AND NOT APPLE) install(FILES "doc/minetest.6" "doc/minetestserver.6" DESTINATION "${MANDIR}/man6") install(FILES "misc/minetest.desktop" DESTINATION "${XDG_APPS_DIR}") install(FILES "misc/minetest.appdata.xml" DESTINATION "${APPDATADIR}") - install(FILES "misc/minetest-icon.svg" DESTINATION "${ICONDIR}/hicolor/scalable/apps") + install(FILES "misc/minetest.svg" DESTINATION "${ICONDIR}/hicolor/scalable/apps") endif() if(APPLE) diff --git a/License notice on adbs and 4hunger mods (ENG).txt b/License notice on adbs and 4hunger mods (ENG).txt deleted file mode 100644 index 1f910522..00000000 --- a/License notice on adbs and 4hunger mods (ENG).txt +++ /dev/null @@ -1,16 +0,0 @@ -There are two mods within MultiCraft licensed under CC BY-NC-SA 4.0 (https://creativecommons.org/licenses/by-nc-sa/4.0/): "adbs" and "4hunger". -Those mods are the intellectual property of 4aiman (4aiman@inbox.ru) and by no means are free (as in freedom) or open-source software. -To fully understand your rights consult the license (the link is given above). -While the CC BY-NC-SA 4.0 license forbids any kind of commercial usage by default, 4aiman holds the right to give his permission to neglect that restriction. - -Thus being said, 4aiman had explicitly granted the right to commercially use "adbs" and "4hunger" mods to Maksim Gamarnik (a.k.a. MoNTE48, MoNTE48@mail.ua) on the following terms: -- Maksim Gamarnik can use current version of "adbs" and "4hunger" mods for commercial purposes in any Minetest or Freeminer related projects - both existing and those which are yet to come; -- The exception mentioned above also applies to any organization with Maksim Gamarnik as it's leader/head. -- The exception mentioned above cease to apply in case any changes to any part of "adbs" or "4hunger" are to be made by any other person than 4aiman; -- The exception mentioned above does not apply to Maksim Gamarnik's or his organization's (organisations') customers. -- Maksim Gamarnik holds no right to grant anyone else the right to use any part of "adbs" or "4hunger" mods commercially. - -All questions concerning 4aiman's rights and protection of those should be directed to 4aiman via e-mail message in the first place. -4aiman has explicitly mentioned that he does not want anyone to "protect" his rights until he will express that intention by himself. -Thus, any person or organization convinced in the fact of the 4aiman's rights infringement should consult with him in the first place. -Note, that in the case 4aiman won't be properly notified and won't express his willingness (due to any reason) to cooperate with anyone who wants to protect 4aiman's rights, the actions of that "4aiman's rights defender" may well be interpreted as a slander against Maksim Gamarnik and/or 4aiman himself. diff --git a/License notice on adbs and 4hunger mods (RUS).txt b/License notice on adbs and 4hunger mods (RUS).txt deleted file mode 100644 index ac5e2e98..00000000 --- a/License notice on adbs and 4hunger mods (RUS).txt +++ /dev/null @@ -1,16 +0,0 @@ -В состав MultiCraft входят два мода, распространяемых под лицензией CC BY-NC-SA 4.0 (https://creativecommons.org/licenses/by-nc-sa/4.0/): "adbs" и "4hunger". -Эти моды являются интеллектуальной собственностью 4aiman (4aiman@inbox.ru) и никоим образом не являются свободным или открытым программным обеспечением. -Ознакомьтесь с лицензией для того чтобы ознакомится со своими правами (ссылка дана выше). -Несмотря на то, что лицензия CC BY-NC-SA 4.0 запрещает любой вид коммерческого использования по-умолчанию, 4aiman имеет право давать разрешение на пренебрежение этим ограничением. - -Таким образом, 4aiman неоднозначно и чётко предоставил право коммерческого использования модов "adbs" и "4hunger" Максиму Гамарнику (Maksim Gamarnik, также известный как MoNTE48, MoNTE48@mail.ua) на следующих условиях: -- Maksim Gamarnik может использовать текущие версии модов "adbs" и "4hunger" в коммерческих целях в любом проекте, связанном с Minetest или Freeminer - как существующих, так и тех, что, возможно, будут созданы; -- Исключительное право действует также и для любой организации, лидером/главой которой является Maksim Gamarnik. -- Исключение теряет силу в случае внесения в код "adbs" или "4hunger" изменений кем-либо помимо самого 4aiman; -- Исключение не распространяется на клиентов Maksim Gamarnik или его организации (организаций). -- Maksim Gamarnik не в праве передавать разрешения на коммерческое использование модов "adbs" или "4hunger" третьей стороне. - -По всем вопросам касательно прав 4aiman и их защиты в первую очередь необходимо обращаться посредством электронной почты лично к 4aiman. -4aiman неоднозначно и чётко заявил, что не хочет, чтобы кто-либо "защищал" его права до тех пор, пока он сам не выразит такого намерения. -Таким образом, любой человек или организация, убежденный(ая) в факте ущемления прав 4aiman, обязана в первую очередь связаться с ним. -Заметьте, что в случае если 4aiman не будет как следует уведомлен и не выразит своего желания (какими бы не были причины) сотрудничать с кем бы то ни было, желающим защищать права 4aiman, действия такого "защитника" вполне могут быть рассмотрены как случай клеветы против Maksim Gamarnik и/или самого 4aiman. diff --git a/adbs_4hunger_permission_state.txt b/adbs_4hunger_permission_state.txt deleted file mode 100644 index b8547f60..00000000 --- a/adbs_4hunger_permission_state.txt +++ /dev/null @@ -1,10 +0,0 @@ -According to the line #9 of the "License notice on adbs and 4hunger mods (ENG).txt" the permission to use adbs & 4hunger commercially should have ceased to apply. -However, Maksim Gamarnik and 4aiman made an agreement which prolongues that permision on certain special terms. -As long as those terms are being carried out the permission to use commertially is granted. -That pemission will be given again upon fullfilling the terms of agreement between Maksim Gamarnik and 4aiman. - - -Согласно строке №9 файла "License notice on adbs and 4hunger mods (RUS).txt", разрешение на коммерческое использование модов adbs и 4hunger должно было потерять силу. -Тем не менее, Maksim Gamarnik и 4aiman пришли к соглашению, которое продлевает данное разрешение до тех пор, пока соблюдаются особые конкретные условия. -Пока эти оговоренные условия соблюдаются, разрешение на коммерческое использование сохраняет свою силу. -Разрешение будет выдано снова, как только условия соглашения между Maksim Gamarnik и 4aiman будут выполнены окончательно. diff --git a/build/android/Makefile b/build/android/Makefile index 6594ac5a..efb7d26d 100644 --- a/build/android/Makefile +++ b/build/android/Makefile @@ -13,10 +13,18 @@ PATHCFGFILE = path.cfg ROOT = $(shell pwd) -GAMES_TO_COPY = MultiCraft_game - # this string will be written to Files.zip in ver.txt VER_TEXT = 1.0.2 +GAMES_TO_COPY = +MODS_TO_COPY = + + +VERSION_MAJOR := $(shell cat $(ROOT)/../../CMakeLists.txt | \ + grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | cut -f2 -d' ') +VERSION_MINOR := $(shell cat $(ROOT)/../../CMakeLists.txt | \ + grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | cut -f2 -d' ') +VERSION_PATCH := $(shell cat $(ROOT)/../../CMakeLists.txt | \ + grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | cut -f2 -d' ') ################################################################################ # Android Version code @@ -29,17 +37,15 @@ ANDROID_VERSION_CODE = 1 # toolchain config for ARMv7 processors ################################################################################ TARGET_HOST = arm-linux -TARGET_ABI = armeabi-v7a-hard +TARGET_ABI = armeabi-v7a TARGET_LIBDIR = armeabi-v7a TARGET_TOOLCHAIN = arm-linux-androideabi- -TARGET_CFLAGS_ADDON = -mfpu=vfpv3-d16 -D_NDK_MATH_NO_SOFTFP=1 \ - -mfloat-abi=hard -march=armv7-a +TARGET_CFLAGS_ADDON = -mfloat-abi=softfp -mfpu=vfpv3 TARGET_CXXFLAGS_ADDON = $(TARGET_CFLAGS_ADDON) -TARGET_LDFLAGS_ADDON = -Wl,--no-warn-mismatch -lm_hard TARGET_ARCH = armv7 CROSS_PREFIX = arm-linux-androideabi- COMPILER_VERSION = 4.9 -HAVE_LEVELDB = 1 +HAVE_LEVELDB = 0 ################################################################################ # toolchain config for x86 processors @@ -61,7 +67,7 @@ LEVELDB_DIR = $(ROOT)/deps/leveldb/ LEVELDB_LIB = $(LEVELDB_DIR)libleveldb.a LEVELDB_TIMESTAMP = $(LEVELDB_DIR)/timestamp LEVELDB_TIMESTAMP_INT = $(ROOT)/deps/leveldb_timestamp -LEVELDB_URL_GIT = https://code.google.com/p/leveldb/ +LEVELDB_URL_GIT = https://github.com/google/leveldb OPENAL_DIR = $(ROOT)/deps/openal-soft/ OPENAL_LIB = $(OPENAL_DIR)libs/$(TARGET_ABI)/libopenal.so @@ -90,7 +96,7 @@ OPENSSL_TIMESTAMP = $(OPENSSL_DIR)timestamp OPENSSL_TIMESTAMP_INT = $(ROOT)/deps/openssl_timestamp OPENSSL_URL = http://www.openssl.org/source/openssl-$(OPENSSL_VERSION).tar.gz -CURL_VERSION = 7.44.0 +CURL_VERSION = 7.45.0 CURL_DIR = $(ROOT)/deps/curl-$(CURL_VERSION) CURL_LIB = $(CURL_DIR)/lib/.libs/libcurl.a CURL_TIMESTAMP = $(CURL_DIR)/timestamp @@ -110,7 +116,14 @@ FREETYPE_TIMESTAMP = $(FREETYPE_DIR)timestamp FREETYPE_TIMESTAMP_INT = $(ROOT)/deps/freetype_timestamp FREETYPE_URL_GIT = https://github.com/cdave1/freetype2-android -SQLITE3_FOLDER = sqlite-amalgamation-3081101 +ICONV_VERSION = 1.14 +ICONV_DIR = $(ROOT)/deps/libiconv/ +ICONV_LIB = $(ICONV_DIR)/lib/.libs/libiconv.so +ICONV_TIMESTAMP = $(ICONV_DIR)timestamp +ICONV_TIMESTAMP_INT = $(ROOT)/deps/iconv_timestamp +ICONV_URL_HTTP = http://ftp.gnu.org/pub/gnu/libiconv/libiconv-$(ICONV_VERSION).tar.gz + +SQLITE3_FOLDER = sqlite-amalgamation-3090100 SQLITE3_URL = http://www.sqlite.org/2015/$(SQLITE3_FOLDER).zip -include $(PATHCFGFILE) @@ -133,7 +146,8 @@ endif $(OPENAL_TIMESTAMP) $(OGG_TIMESTAMP) \ $(IRRLICHT_TIMESTAMP) $(CURL_TIMESTAMP) \ $(OPENSSL_TIMESTAMP) curl_binary \ - $(ROOT)/jni/src/android_version.h + $(ROOT)/jni/src/android_version.h \ + $(ROOT)/jni/src/android_version_githash.h debug : $(PATHCFGFILE) export NDEBUG=; \ @@ -204,8 +218,8 @@ $(OPENAL_LIB): $(OPENAL_TIMESTAMP) echo "changed timestamp for openal detected building..."; \ cd ${OPENAL_DIR}; \ ndk-build NDEBUG=${NDEBUG} NDK_MODULE_PATH=${NDK_MODULE_PATH} \ - APP_ABI=${TARGET_ABI} APP_PLATFORM=${APP_PLATFORM} \ - TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \ + APP_ABI=${TARGET_ABI} TARGET_ARCH_ABI=${TARGET_ABI} \ + APP_PLATFORM=${APP_PLATFORM} TARGET_CFLAGS+="${TARGET_CFLAGS_ADDON}" \ TARGET_LDFLAGS+="${TARGET_LDFLAGS_ADDON}" \ TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" || exit 1; \ touch ${OPENAL_TIMESTAMP}; \ @@ -231,6 +245,7 @@ ogg_download : git clone ${OGG_URL_GIT}|| exit 1; \ cd libvorbis-libogg-android ; \ patch -p1 < ../../libvorbis-libogg-fpu.patch || exit 1; \ + sed -i 's-:-?-' jni/Application.mk; \ fi ogg : $(OGG_LIB) @@ -378,12 +393,6 @@ freetype_download : git clone ${FREETYPE_URL_GIT} || exit 1; \ fi -$(IRRLICHT_TIMESTAMP) : irrlicht_download - @LAST_MODIF=$$(find ${IRRLICHT_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${IRRLICHT_TIMESTAMP}; \ - fi - freetype : $(FREETYPE_LIB) $(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP) @@ -416,6 +425,67 @@ $(FREETYPE_LIB) : $(FREETYPE_TIMESTAMP) clean_freetype : $(RM) -rf ${FREETYPE_DIR} +$(ICONV_TIMESTAMP) : iconv_download + @LAST_MODIF=$$(find ${ICONV_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ + if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ + touch ${ICONV_TIMESTAMP}; \ + fi + +iconv_download : + @if [ ! -d ${ICONV_DIR} ] ; then \ + echo "iconv sources missing, downloading..."; \ + mkdir -p ${ROOT}/deps; \ + cd ${ROOT}/deps; \ + wget ${ICONV_URL_HTTP} || exit 1; \ + tar -xzf libiconv-${ICONV_VERSION}.tar.gz || exit 1; \ + rm libiconv-${ICONV_VERSION}.tar.gz; \ + ln -s libiconv-${ICONV_VERSION} libiconv; \ + cd ${ICONV_DIR}; \ + patch -p1 < ${ROOT}/libiconv_android.patch; \ + patch -p1 < ${ROOT}/libiconv_stdio.patch; \ + fi + +iconv : $(ICONV_LIB) + +$(ICONV_LIB) : $(ICONV_TIMESTAMP) + @REFRESH=0; \ + if [ ! -e ${ICONV_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ ! -e ${ICONV_LIB} ] ; then \ + REFRESH=1; \ + fi; \ + if [ ${ICONV_TIMESTAMP} -nt ${ICONV_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ $$REFRESH -ne 0 ] ; then \ + mkdir -p ${ICONV_DIR}; \ + export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \ + echo "changed timestamp for iconv detected building..."; \ + cd ${ICONV_DIR}; \ + \ + export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-iconv; \ + ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \ + --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \ + --install-dir=$${TOOLCHAIN}; \ + export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \ + export CC=${CROSS_PREFIX}gcc; \ + export CXX=${CROSS_PREFIX}g++; \ + export TARGET_OS=OS_ANDROID_CROSSCOMPILE; \ + ./configure --host=${TARGET_HOST} || exit 1; \ + sed -i 's/LIBICONV_VERSION_INFO) /LIBICONV_VERSION_INFO) -avoid-version /g' lib/Makefile; \ + grep "iconv_LDFLAGS" src/Makefile; \ + $(MAKE) -s || exit 1; \ + touch ${ICONV_TIMESTAMP}; \ + touch ${ICONV_TIMESTAMP_INT}; \ + rm -rf ${TOOLCHAIN}; \ + else \ + echo "nothing to be done for iconv"; \ + fi + +clean_iconv : + $(RM) -rf ${ICONV_DIR} + #Note: Texturehack patch is required for gpu's not supporting color format # correctly. Known bad GPU: # -geforce on emulator @@ -433,6 +503,12 @@ irrlicht_download : patch -p1 < ../../irrlicht-texturehack.patch || exit 1; \ fi +$(IRRLICHT_TIMESTAMP) : irrlicht_download + @LAST_MODIF=$$(find ${IRRLICHT_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ + if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ + touch ${IRRLICHT_TIMESTAMP}; \ + fi + irrlicht : $(IRRLICHT_LIB) $(IRRLICHT_LIB): $(IRRLICHT_TIMESTAMP) $(FREETYPE_LIB) @@ -529,7 +605,7 @@ clean_curl : curl_binary: @if [ ! -d "deps/curl-${CURL_VERSION_BINARY}" ] ; then \ - echo "curl sources missing, downloading..."; \ + echo "curl binary missing, downloading..."; \ mkdir -p ${ROOT}/deps; \ cd deps; \ wget http://curl.haxx.se/gknw.net/${CURL_VERSION}/dist-android/curl-${CURL_VERSION}-rtmp-ssh2-ssl-zlib-static-bin-android.tar.gz || exit 1;\ @@ -557,6 +633,61 @@ gmp_download : gmp : $(GMP_LIB) +$(GMP_LIB): $(GMP_TIMESTAMP) + @REFRESH=0; \ + if [ ! -e ${GMP_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ ! -e ${GMP_LIB} ] ; then \ + REFRESH=1; \ + fi; \ + if [ ${GMP_TIMESTAMP} -nt ${GMP_TIMESTAMP_INT} ] ; then \ + REFRESH=1; \ + fi; \ + if [ $$REFRESH -ne 0 ] ; then \ + mkdir -p ${GMP_DIR}; \ + export PATH="$${PATH}:${SDKFOLDER}/platform-tools:${ANDROID_NDK}"; \ + echo "changed timestamp for gmp detected building..."; \ + cd deps/gmp-${GMP_VERSION}; \ + export CROSS_PREFIX=${CROSS_PREFIX}; \ + export TOOLCHAIN=/tmp/ndk-${TARGET_HOST}-gmp; \ + ${ANDROID_NDK}/build/tools/make-standalone-toolchain.sh \ + --toolchain=${TARGET_TOOLCHAIN}${COMPILER_VERSION} \ + --install-dir=$${TOOLCHAIN}; \ + export PATH="$${TOOLCHAIN}/bin:$${PATH}"; \ + export CC=${CROSS_PREFIX}gcc; \ + export CXX=${CROSS_PREFIX}g++; \ + export LIBGMP_LDFLAGS="-avoid-version"; \ + export LIBGMPXX_LDFLAGS="-avoid-version"; \ + ./configure --disable-static --host=${TARGET_HOST} --prefix=/usr; \ + $(MAKE) install DESTDIR=/${GMP_DIR} || exit 1; \ + touch ${GMP_TIMESTAMP}; \ + touch ${GMP_TIMESTAMP_INT}; \ + $(RM) -rf $${TOOLCHAIN}; \ + else \ + echo "nothing to be done for gmp"; \ + fi + + +$(GMP_TIMESTAMP) : gmp_download + @LAST_MODIF=$$(find ${GMP_DIR} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ + if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ + touch ${GMP_TIMESTAMP}; \ + fi + +gmp_download : + @if [ ! -d "${GMP_DIR}" ] ; then \ + echo "gmp sources missing, downloading..."; \ + mkdir -p ${ROOT}/deps; \ + cd deps; \ + wget ${GMP_URL_HTTP} || exit 1; \ + tar -xjf gmp-${GMP_VERSION}a.tar.bz2 || exit 1; \ + rm gmp-${GMP_VERSION}a.tar.bz2; \ + ln -s gmp-${GMP_VERSION} gmp; \ + fi + +gmp : $(GMP_LIB) + $(GMP_LIB): $(GMP_TIMESTAMP) @REFRESH=0; \ if [ ! -e ${GMP_TIMESTAMP_INT} ] ; then \ @@ -610,42 +741,14 @@ clean_sqlite3: $(ASSETS_TIMESTAMP) : $(IRRLICHT_LIB) @mkdir -p ${ROOT}/deps; \ - LAST_MODIF=$$(find ${ROOT}/../../builtin -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${ROOT}/../../builtin/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - echo builtin changed $$LAST_MODIF; \ - fi; \ - LAST_MODIF=$$(find ${ROOT}/../../client -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${ROOT}/../../client/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - fi; \ - LAST_MODIF=$$(find ${ROOT}/../../doc -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${ROOT}/../../doc/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - fi; \ - LAST_MODIF=$$(find ${ROOT}/../../fonts -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${ROOT}/../../fonts/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - fi; \ - LAST_MODIF=$$(find ${ROOT}/../../games -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${ROOT}/../../games/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - fi; \ \ - LAST_MODIF=$$(find ${ROOT}/../../po -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${ROOT}/../../po/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - fi; \ - LAST_MODIF=$$(find ${ROOT}/../../textures -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ - if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ - touch ${ROOT}/../../textures/timestamp; \ - touch ${ASSETS_TIMESTAMP}; \ - fi; \ + for DIRNAME in {builtin,client,doc,fonts,games,mods,po,textures}; do \ + LAST_MODIF=$$(find ${ROOT}/../../${DIRNAME} -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ + if [ $$(basename $$LAST_MODIF) != "timestamp" ]; then \ + touch ${ROOT}/../../${DIRNAME}/timestamp; \ + touch ${ASSETS_TIMESTAMP}; \ + echo ${DIRNAME} changed $$LAST_MODIF; \ + fi; \ + done; \ LAST_MODIF=$$(find ${IRRLICHT_DIR}/media -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "); \ if [ $$(basename $$LAST_MODIF) != "timestamp" ] ; then \ touch ${IRRLICHT_DIR}/media/timestamp; \ @@ -676,25 +779,25 @@ assets : $(ASSETS_TIMESTAMP) if [ $$REFRESH -ne 0 ] ; then \ echo "assets changed, refreshing..."; \ $(MAKE) clean_assets; \ - mkdir -p ${ROOT}/assets/MultiCraft; \ - echo ${VER_TEXT} > ${ROOT}/assets/MultiCraft/ver.txt; \ - cp ${ROOT}/../../multicraft.conf.example ${ROOT}/assets/MultiCraft; \ - cp ${ROOT}/../../README.md ${ROOT}/assets/MultiCraft; \ - cp -r ${ROOT}/../../builtin ${ROOT}/assets/MultiCraft; \ - cp -r ${ROOT}/../../client ${ROOT}/assets/MultiCraft; \ - #cp -r ${ROOT}/../../doc ${ROOT}/assets/MultiCraft; \ - cp -r ${ROOT}/../../fonts ${ROOT}/assets/MultiCraft; \ - mkdir ${ROOT}/assets/MultiCraft/games; \ - for game in ${GAMES_TO_COPY}; \ - do \ - cp -r ${ROOT}/../../games/$$game ${ROOT}/assets/MultiCraft/games/; \ + mkdir -p ${ROOT}/assets/Minetest; \ + cp ${ROOT}/../../minetest.conf.example ${ROOT}/assets/Minetest; \ + cp ${ROOT}/../../README.txt ${ROOT}/assets/Minetest; \ + cp -r ${ROOT}/../../builtin ${ROOT}/assets/Minetest; \ + cp -r ${ROOT}/../../client ${ROOT}/assets/Minetest; \ + cp -r ${ROOT}/../../doc ${ROOT}/assets/Minetest; \ + cp -r ${ROOT}/../../fonts ${ROOT}/assets/Minetest; \ + mkdir ${ROOT}/assets/Minetest/games; \ + for game in ${GAMES_TO_COPY}; do \ + cp -r ${ROOT}/../../games/$$game ${ROOT}/assets/Minetest/games/; \ done; \ - cp -r ${ROOT}/../../po ${ROOT}/assets/MultiCraft; \ - cp -r ${ROOT}/../../textures ${ROOT}/assets/MultiCraft; \ - mkdir -p ${ROOT}/assets/MultiCraft/media; \ - cp -r ${IRRLICHT_DIR}/media/Shaders ${ROOT}/assets/MultiCraft/media; \ - echo "excluding PO files"; \ - rm -r ${ROOT}/assets/MultiCraft/po; \ + mkdir ${ROOT}/assets/Minetest/mods; \ + for mod in ${MODS_TO_COPY}; do \ + cp -r ${ROOT}/../../mods/$$mod ${ROOT}/assets/Minetest/mods/; \ + done; \ + cp -r ${ROOT}/../../po ${ROOT}/assets/Minetest; \ + cp -r ${ROOT}/../../textures ${ROOT}/assets/Minetest; \ + mkdir -p ${ROOT}/assets/Minetest/media; \ + cp -r ${IRRLICHT_DIR}/media/Shaders ${ROOT}/assets/Minetest/media; \ cd ${ROOT}/assets || exit 1; \ find . -name "timestamp" -exec rm {} \; ; \ find . -name "*.blend" -exec rm {} \; ; \ @@ -719,9 +822,9 @@ assets : $(ASSETS_TIMESTAMP) clean_assets : @$(RM) -r assets -apk: $(PATHCFGFILE) assets $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARGET) \ +apk: $(PATHCFGFILE) assets $(ICONV_LIB) $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARGET) \ $(OPENAL_LIB) $(OGG_LIB) prep_srcdir $(ROOT)/jni/src/android_version.h \ - sqlite3_download + $(ROOT)/jni/src/android_version_githash.h sqlite3_download @export NDEBUG=$$NDEBUG; $(MAKE) manifest; \ export PATH=$$PATH:${SDKFOLDER}/platform-tools:${ANDROID_NDK}; \ export ANDROID_HOME=${SDKFOLDER}; \ @@ -735,19 +838,20 @@ apk: $(PATHCFGFILE) assets $(IRRLICHT_LIB) $(CURL_LIB) $(GMP_LIB) $(LEVELDB_TARG TARGET_CXXFLAGS+="${TARGET_CXXFLAGS_ADDON}" && \ ant $$BUILD_TYPE && \ echo "++ Success!" && \ - echo "APK: bin/MultiCraft-$$BUILD_TYPE.apk" && \ + echo "APK: bin/MultiCraft-$$BUILD_TYPE.apk" && \ echo "You can install it with \`adb install -r bin/MultiCraft-$$BUILD_TYPE.apk\`" prep_srcdir : - @rm ${ROOT}/jni/src; \ - ln -s ${ROOT}/../../src ${ROOT}/jni/src + @if [ ! -e ${ROOT}/jni/src ]; then \ + ln -s ${ROOT}/../../src ${ROOT}/jni/src; \ + fi clean_apk : manifest @export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \ export ANDROID_HOME=${SDKFOLDER}; \ ant clean -install_debug : +install_debug : @export PATH=$$PATH:${SDKFOLDER}platform-tools:${ANDROID_NDK}; \ adb install -r ${ROOT}/bin/MultiCraft-debug.apk @@ -761,43 +865,52 @@ envpaths : clean_all : @$(MAKE) clean_apk; \ - $(MAKE) clean_assets clean_irrlicht clean_leveldb clean_curl clean_openssl \ + $(MAKE) clean_assets clean_iconv clean_irrlicht clean_leveldb clean_curl clean_openssl \ clean_openal clean_ogg clean_gmp clean_manifest; \ sleep 1; \ $(RM) -r gen libs obj deps bin Debug and_env -$(ROOT)/jni/src/android_version.h : - @echo "#ifndef ANDROID_MT_VERSION_H" \ - >${ROOT}/jni/src/android_version.h; \ - echo "#define ANDROID_MT_VERSION_H" \ - >> ${ROOT}/jni/src/android_version.h; \ - echo "#define VERSION_MAJOR $$(cat ${ROOT}/../../CMakeLists.txt | \ - grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | awk '{print $$2;}')" \ - >> ${ROOT}/jni/src/android_version.h; \ - echo "#define VERSION_MINOR $$(cat ${ROOT}/../../CMakeLists.txt | \ - grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | awk '{print $$2;}')" \ - >> ${ROOT}/jni/src/android_version.h; \ - echo "#define VERSION_PATCH $$(cat ${ROOT}/../../CMakeLists.txt | \ - grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | awk '{print $$2;}')" \ - >> ${ROOT}/jni/src/android_version.h; \ +$(ROOT)/jni/src/android_version_githash.h : prep_srcdir + @export VERSION_FILE=${ROOT}/jni/src/android_version_githash.h; \ + export VERSION_FILE_NEW=$${VERSION_FILE}.new; \ + { \ + echo "#ifndef ANDROID_MT_VERSION_GITHASH_H"; \ + echo "#define ANDROID_MT_VERSION_GITHASH_H"; \ export GITHASH=$$(git rev-parse --short=8 HEAD); \ - export GITTAG=$$(git describe --abbrev=0 --tags); \ - echo "#define VERSION_GITHASH \"1.0.1\"" \ - >> ${ROOT}/jni/src/android_version.h; \ + export VERSION_STR="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"; \ + echo "#define VERSION_GITHASH \"$$VERSION_STR-$$GITHASH-Android\""; \ + echo "#endif"; \ + } > "$${VERSION_FILE_NEW}"; \ + if ! cmp -s $${VERSION_FILE} $${VERSION_FILE_NEW}; then \ + echo "android_version_githash.h changed, updating..."; \ + mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}"; \ + else \ + rm "$${VERSION_FILE_NEW}"; \ + fi + + +$(ROOT)/jni/src/android_version.h : prep_srcdir + @export VERSION_FILE=${ROOT}/jni/src/android_version.h; \ + export VERSION_FILE_NEW=$${VERSION_FILE}.new; \ + { \ + echo "#ifndef ANDROID_MT_VERSION_H"; \ + echo "#define ANDROID_MT_VERSION_H"; \ + echo "#define VERSION_MAJOR ${VERSION_MAJOR}"; \ + echo "#define VERSION_MINOR ${VERSION_MINOR}"; \ + echo "#define VERSION_PATCH ${VERSION_PATCH}"; \ echo "#define VERSION_STRING STR(VERSION_MAJOR)\".\"STR(VERSION_MINOR)\ - \".\"STR(VERSION_PATCH)" \ - >> ${ROOT}/jni/src/android_version.h; \ - echo "#endif" \ - >> ${ROOT}/jni/src/android_version.h; + \".\"STR(VERSION_PATCH)"; \ + echo "#endif"; \ + } > $${VERSION_FILE_NEW}; \ + if ! cmp -s $${VERSION_FILE} $${VERSION_FILE_NEW}; then \ + echo "android_version.h changed, updating..."; \ + mv "$${VERSION_FILE_NEW}" "$${VERSION_FILE}"; \ + else \ + rm "$${VERSION_FILE_NEW}"; \ + fi manifest : - @VERS_MAJOR=$$(cat ${ROOT}/../../CMakeLists.txt | \ - grep ^set\(VERSION_MAJOR\ | sed 's/)/ /' | awk '{print $$2;}'); \ - VERS_MINOR=$$(cat ${ROOT}/../../CMakeLists.txt | \ - grep ^set\(VERSION_MINOR\ | sed 's/)/ /' | awk '{print $$2;}'); \ - VERS_PATCH=$$(cat ${ROOT}/../../CMakeLists.txt | \ - grep ^set\(VERSION_PATCH\ | sed 's/)/ /' | awk '{print $$2;}'); \ - BASE_VERSION="$$VERS_MAJOR.$$VERS_MINOR.$$VERS_PATCH"; \ + @BASE_VERSION="${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}"; \ if [ "${NDEBUG}x" != "x" ] ; then \ DBG=''; \ DBG_FLAG="android:debuggable=\"false\""; \ @@ -806,8 +919,8 @@ manifest : DBG_FLAG="android:debuggable=\"true\""; \ fi; \ cat ${ROOT}/AndroidManifest.xml.template | \ - sed s/###ANDROID_VERSION###/${ANDROID_VERSION_CODE}/g | \ - sed s/###BASE_VERSION###/$$BASE_VERSION/g | \ + sed "s/###ANDROID_VERSION###/${ANDROID_VERSION_CODE}/g" | \ + sed "s/###BASE_VERSION###/$$BASE_VERSION/g" | \ sed -e "s@###DEBUG_BUILD###@$$DBG@g" | \ sed -e "s@###DEBUG_FLAG###@$$DBG_FLAG@g" >${ROOT}/AndroidManifest.xml diff --git a/build/android/jni/Android.mk b/build/android/jni/Android.mk index 2c574bc4..324e1666 100644 --- a/build/android/jni/Android.mk +++ b/build/android/jni/Android.mk @@ -24,6 +24,11 @@ LOCAL_MODULE := freetype LOCAL_SRC_FILES := deps/freetype2-android/Android/obj/local/$(TARGET_ARCH_ABI)/libfreetype2-static.a include $(PREBUILT_STATIC_LIBRARY) +include $(CLEAR_VARS) +LOCAL_MODULE := iconv +LOCAL_SRC_FILES := deps/libiconv/lib/.libs/libiconv.so +include $(PREBUILT_SHARED_LIBRARY) + include $(CLEAR_VARS) LOCAL_MODULE := openal LOCAL_SRC_FILES := deps/openal-soft/libs/$(TARGET_LIBDIR)/libopenal.so @@ -97,6 +102,7 @@ LOCAL_C_INCLUDES := \ jni/src/json \ jni/src/cguittfont \ deps/irrlicht/include \ + deps/libiconv/include \ deps/freetype2-android/include \ deps/curl/include \ deps/openal-soft/jni/OpenAL/include \ @@ -106,6 +112,7 @@ LOCAL_C_INCLUDES := \ deps/sqlite/ LOCAL_SRC_FILES := \ + jni/src/areastore.cpp \ jni/src/ban.cpp \ jni/src/camera.cpp \ jni/src/cavegen.cpp \ @@ -153,6 +160,7 @@ LOCAL_SRC_FILES := \ jni/src/httpfetch.cpp \ jni/src/hud.cpp \ jni/src/imagefilters.cpp \ + jni/src/intlGUIEditBox.cpp \ jni/src/inventory.cpp \ jni/src/inventorymanager.cpp \ jni/src/itemdef.cpp \ @@ -165,6 +173,7 @@ LOCAL_SRC_FILES := \ jni/src/mapblock.cpp \ jni/src/mapblock_mesh.cpp \ jni/src/mapgen.cpp \ + jni/src/mapgen_fractal.cpp \ jni/src/mapgen_singlenode.cpp \ jni/src/mapgen_v5.cpp \ jni/src/mapgen_v6.cpp \ @@ -176,6 +185,7 @@ LOCAL_SRC_FILES := \ jni/src/mg_decoration.cpp \ jni/src/mg_ore.cpp \ jni/src/mg_schematic.cpp \ + jni/src/minimap.cpp \ jni/src/mods.cpp \ jni/src/nameidmapping.cpp \ jni/src/nodedef.cpp \ @@ -275,6 +285,7 @@ LOCAL_SRC_FILES += \ jni/src/script/cpp_api/s_player.cpp \ jni/src/script/cpp_api/s_security.cpp \ jni/src/script/cpp_api/s_server.cpp \ + jni/src/script/lua_api/l_areastore.cpp \ jni/src/script/lua_api/l_base.cpp \ jni/src/script/lua_api/l_craft.cpp \ jni/src/script/lua_api/l_env.cpp \ @@ -332,20 +343,19 @@ LOCAL_SRC_FILES += \ jni/src/lua/src/lzio.c \ jni/src/lua/src/print.c -# sqlite +# SQLite3 LOCAL_SRC_FILES += deps/sqlite/sqlite3.c -# jthread -LOCAL_SRC_FILES += \ - jni/src/jthread/pthread/jevent.cpp \ - jni/src/jthread/pthread/jmutex.cpp \ - jni/src/jthread/pthread/jsemaphore.cpp \ - jni/src/jthread/pthread/jthread.cpp +# Threading +LOCAL_SRC_FILES += \ + jni/src/threading/mutex.cpp \ + jni/src/threading/semaphore.cpp \ + jni/src/threading/thread.cpp -# json +# JSONCPP LOCAL_SRC_FILES += jni/src/json/jsoncpp.cpp -LOCAL_SHARED_LIBRARIES := openal ogg vorbis gmp +LOCAL_SHARED_LIBRARIES := iconv openal ogg vorbis gmp LOCAL_STATIC_LIBRARIES := Irrlicht freetype curl ssl crypto android_native_app_glue $(PROFILER_LIBS) ifeq ($(HAVE_LEVELDB), 1) diff --git a/build/android/libiconv_android.patch b/build/android/libiconv_android.patch new file mode 100644 index 00000000..4eca0a4e --- /dev/null +++ b/build/android/libiconv_android.patch @@ -0,0 +1,39 @@ +--- a/libcharset/lib/localcharset.c 2015-06-10 11:55:25.933870724 +0200 ++++ b/libcharset/lib/localcharset.c 2015-06-10 11:55:39.578063493 +0200 +@@ -47,7 +47,7 @@ + + #if !defined WIN32_NATIVE + # include +-# if HAVE_LANGINFO_CODESET ++# if HAVE_LANGINFO_CODESET && !(defined __ANDROID__) + # include + # else + # if 0 /* see comment below */ +@@ -124,7 +124,7 @@ get_charset_aliases (void) + cp = charset_aliases; + if (cp == NULL) + { +-#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__) ++#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__ || defined __ANDROID__) + const char *dir; + const char *base = "charset.alias"; + char *file_name; +@@ -338,6 +338,9 @@ get_charset_aliases (void) + "CP54936" "\0" "GB18030" "\0" + "CP65001" "\0" "UTF-8" "\0"; + # endif ++# if defined __ANDROID__ ++ cp = "*" "\0" "UTF-8" "\0"; ++# endif + #endif + + charset_aliases = cp; +@@ -361,7 +364,7 @@ locale_charset (void) + const char *codeset; + const char *aliases; + +-#if !(defined WIN32_NATIVE || defined OS2) ++#if !(defined WIN32_NATIVE || defined OS2 || defined __ANDROID__) + + # if HAVE_LANGINFO_CODESET + diff --git a/build/android/libiconv_stdio.patch b/build/android/libiconv_stdio.patch new file mode 100644 index 00000000..9fa50f79 --- /dev/null +++ b/build/android/libiconv_stdio.patch @@ -0,0 +1,13 @@ +--- a/srclib/stdio.in.h 2011-08-07 15:42:06.000000000 +0200 ++++ b/srclib/stdio.in.h 2015-06-10 09:27:58.129056262 +0200 +@@ -695,8 +696,9 @@ _GL_CXXALIASWARN (gets); + /* It is very rare that the developer ever has full control of stdin, + so any use of gets warrants an unconditional warning. Assume it is + always declared, since it is required by C89. */ +-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); ++/*_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");*/ ++#define gets(a) fgets( a, sizeof(*(a)), stdin) + #endif + + +#if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ diff --git a/build/android/libs/wversionmanager-1.3.jar b/build/android/libs/wversionmanager-1.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..390ce173ce07009054404f9cd08f303702ef7180 GIT binary patch literal 10769 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 charlimit then - table.insert(retval,last_line) + table_insert(retval, last_line) last_line = "" end @@ -317,17 +332,17 @@ function core.splittext(text,charlimit) last_line = last_line .. " " end - last_line = last_line .. string.sub(text,current_idx,stop -1) + last_line = last_line .. string_sub(text, current_idx, stop - 1) if gotnewline then - table.insert(retval,last_line) + table_insert(retval, last_line) last_line = "" gotnewline = false end current_idx = stop+1 - start,stop = string.find(text," ",current_idx) - nl_start,nl_stop = string.find(text,"\n",current_idx) + start,stop = string_find(text, " ", current_idx) + nl_start,nl_stop = string_find(text, "\n", current_idx) if nl_start ~= nil and (start == nil or nl_start < start) then start = nl_start @@ -338,11 +353,11 @@ function core.splittext(text,charlimit) --add last part of text if string.len(last_line) + (string.len(text) - current_idx) > charlimit then - table.insert(retval,last_line) - table.insert(retval,string.sub(text,current_idx)) + table_insert(retval, last_line) + table_insert(retval, string_sub(text, current_idx)) else - last_line = last_line .. " " .. string.sub(text,current_idx) - table.insert(retval,last_line) + last_line = last_line .. " " .. string_sub(text, current_idx) + table_insert(retval, last_line) end return retval @@ -539,6 +554,36 @@ assert(core.string_to_pos("10.0, 5, -2").x == 10) assert(core.string_to_pos("( 10.0, 5, -2)").z == -2) assert(core.string_to_pos("asd, 5, -2)") == nil) +-------------------------------------------------------------------------------- +function core.string_to_area(value) + local p1, p2 = unpack(value:split(") (")) + if p1 == nil or p2 == nil then + return nil + end + + p1 = core.string_to_pos(p1 .. ")") + p2 = core.string_to_pos("(" .. p2) + if p1 == nil or p2 == nil then + return nil + end + + return p1, p2 +end + +local function test_string_to_area() + local p1, p2 = core.string_to_area("(10.0, 5, -2) ( 30.2, 4, -12.53)") + assert(p1.x == 10.0 and p1.y == 5 and p1.z == -2) + assert(p2.x == 30.2 and p2.y == 4 and p2.z == -12.53) + + p1, p2 = core.string_to_area("(10.0, 5, -2 30.2, 4, -12.53") + assert(p1 == nil and p2 == nil) + + p1, p2 = core.string_to_area("(10.0, 5,) -2 fgdf2, 4, -12.53") + assert(p1 == nil and p2 == nil) +end + +test_string_to_area() + -------------------------------------------------------------------------------- function table.copy(t, seen) local n = {} diff --git a/builtin/common/strict.lua b/builtin/common/strict.lua index c7b86461..05ceadf7 100644 --- a/builtin/common/strict.lua +++ b/builtin/common/strict.lua @@ -9,11 +9,6 @@ function core.global_exists(name) end -local function warn(message) - print(os.date("%H:%M:%S: WARNING: ")..message) -end - - local meta = {} local declared = {} -- Key is source file, line, and variable name; seperated by NULs @@ -27,7 +22,7 @@ function meta:__newindex(name, value) info.currentline, name) if not warned[warn_key] and info.what ~= "main" and info.what ~= "C" then - warn(("Assignment to undeclared ".. + core.log("warning", ("Assignment to undeclared ".. "global %q inside a function at %s.") :format(name, desc)) warned[warn_key] = true @@ -35,9 +30,8 @@ function meta:__newindex(name, value) declared[name] = true end -- Ignore mod namespaces - if WARN_INIT and (not core.get_current_modname or - name ~= core.get_current_modname()) then - warn(("Global variable %q created at %s.") + if WARN_INIT and name ~= core.get_current_modname() then + core.log("warning", ("Global variable %q created at %s.") :format(name, desc)) end rawset(self, name, value) @@ -48,7 +42,7 @@ function meta:__index(name) local info = debug.getinfo(2, "Sl") local warn_key = ("%s\0%d\0%s"):format(info.source, info.currentline, name) if not declared[name] and not warned[warn_key] and info.what ~= "C" then - warn(("Undeclared global variable %q accessed at %s:%s") + core.log("warning", ("Undeclared global variable %q accessed at %s:%s") :format(name, info.short_src, info.currentline)) warned[warn_key] = true end diff --git a/builtin/fstk/buttonbar.lua b/builtin/fstk/buttonbar.lua index 9a9ec999..df749563 100644 --- a/builtin/fstk/buttonbar.lua +++ b/builtin/fstk/buttonbar.lua @@ -1,18 +1,18 @@ --Minetest --Copyright (C) 2014 sapier -- ---self program is free software; you can redistribute it and/or modify +--This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- ---self program is distributed in the hope that it will be useful, +--This program 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 Lesser General Public License for more details. -- --You should have received a copy of the GNU Lesser General Public License along ---with self program; if not, write to the Free Software Foundation, Inc., +--with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. @@ -24,11 +24,11 @@ local function buttonbar_formspec(self) local formspec = string.format("box[%f,%f;%f,%f;%s]", self.pos.x,self.pos.y ,self.size.x,self.size.y,self.bgcolor) - + for i=self.startbutton,#self.buttons,1 do local btn_name = self.buttons[i].name local btn_pos = {} - + if self.orientation == "horizontal" then btn_pos.x = self.pos.x + --base pos (i - self.startbutton) * self.btn_size + --button offset @@ -36,7 +36,7 @@ local function buttonbar_formspec(self) else btn_pos.x = self.pos.x + (self.btn_size * 0.05) end - + if self.orientation == "vertical" then btn_pos.y = self.pos.y + --base pos (i - self.startbutton) * self.btn_size + --button offset @@ -44,18 +44,18 @@ local function buttonbar_formspec(self) else btn_pos.y = self.pos.y + (self.btn_size * 0.05) end - + if (self.orientation == "vertical" and (btn_pos.y + self.btn_size <= self.pos.y + self.size.y)) or (self.orientation == "horizontal" and (btn_pos.x + self.btn_size <= self.pos.x + self.size.x)) then - + local borders="true" - + if self.buttons[i].image ~= nil then borders="false" end - + formspec = formspec .. string.format("image_button[%f,%f;%f,%f;%s;%s;%s;true;%s]tooltip[%s;%s]", btn_pos.x, btn_pos.y, self.btn_size, self.btn_size, @@ -75,7 +75,7 @@ local function buttonbar_formspec(self) btn_dec_pos.y = self.pos.y + (self.btn_size * 0.05) local btn_inc_pos = {} local btn_size = {} - + if self.orientation == "horizontal" then btn_size.x = 0.5 btn_size.y = self.btn_size @@ -87,25 +87,25 @@ local function buttonbar_formspec(self) btn_inc_pos.x = self.pos.x + (self.btn_size * 0.05) btn_inc_pos.y = self.pos.y + self.size.y - 0.5 end - + local text_dec = "<" local text_inc = ">" if self.orientation == "vertical" then text_dec = "^" text_inc = "v" end - + formspec = formspec .. string.format("image_button[%f,%f;%f,%f;;btnbar_dec_%s;%s;true;true]", btn_dec_pos.x, btn_dec_pos.y, btn_size.x, btn_size.y, self.name, text_dec) - + formspec = formspec .. string.format("image_button[%f,%f;%f,%f;;btnbar_inc_%s;%s;true;true]", btn_inc_pos.x, btn_inc_pos.y, btn_size.x, btn_size.y, self.name, text_inc) end - + return formspec end @@ -113,16 +113,16 @@ local function buttonbar_buttonhandler(self, fields) if fields["btnbar_inc_" .. self.name] ~= nil and self.startbutton < #self.buttons then - + self.startbutton = self.startbutton + 1 return true end - + if fields["btnbar_dec_" .. self.name] ~= nil and self.startbutton > 1 then self.startbutton = self.startbutton - 1 return true end - + for i=1,#self.buttons,1 do if fields[self.buttons[i].name] ~= nil then return self.userbuttonhandler(fields) @@ -134,35 +134,35 @@ local buttonbar_metatable = { handle_buttons = buttonbar_buttonhandler, handle_events = function(self, event) end, get_formspec = buttonbar_formspec, - + hide = function(self) self.hidden = true end, show = function(self) self.hidden = false end, delete = function(self) ui.delete(self) end, - + add_button = function(self, name, caption, image, tooltip) if caption == nil then caption = "" end if image == nil then image = "" end if tooltip == nil then tooltip = "" end - + table.insert(self.buttons,{ name=name, caption=caption, image=image, tooltip=tooltip}) if self.orientation == "horizontal" then if ( (self.btn_size * #self.buttons) + (self.btn_size * 0.05 *2) > self.size.x ) then - + self.btn_initial_offset = self.btn_size * 0.05 + 0.5 self.have_move_buttons = true end else if ((self.btn_size * #self.buttons) + (self.btn_size * 0.05 *2) > self.size.y ) then - + self.btn_initial_offset = self.btn_size * 0.05 + 0.5 self.have_move_buttons = true end end end, - + set_bgparams = function(self, bgcolor) if (type(bgcolor) == "string") then self.bgcolor = bgcolor @@ -189,20 +189,20 @@ function buttonbar_create(name, cbf_buttonhandler, pos, orientation, size) self.startbutton = 1 self.have_move_buttons = false self.hidden = false - + if self.orientation == "horizontal" then self.btn_size = self.size.y else self.btn_size = self.size.x end - + if (self.btn_initial_offset == nil) then self.btn_initial_offset = self.btn_size * 0.05 end self.userbuttonhandler = cbf_buttonhandler self.buttons = {} - + setmetatable(self,buttonbar_metatable) ui.add(self) diff --git a/builtin/fstk/dialog.lua b/builtin/fstk/dialog.lua index 214b0388..b4c93603 100644 --- a/builtin/fstk/dialog.lua +++ b/builtin/fstk/dialog.lua @@ -1,18 +1,18 @@ --Minetest --Copyright (C) 2014 sapier -- ---self program is free software; you can redistribute it and/or modify +--This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- ---self program is distributed in the hope that it will be useful, +--this program 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 Lesser General Public License for more details. -- --You should have received a copy of the GNU Lesser General Public License along ---with self program; if not, write to the Free Software Foundation, Inc., +--with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. local function dialog_event_handler(self,event) @@ -61,7 +61,7 @@ function dialog_create(name,get_formspec,buttonhandler,eventhandler) self.formspec = get_formspec self.buttonhandler = buttonhandler self.user_eventhandler = eventhandler - + setmetatable(self,dialog_metatable) ui.add(self) diff --git a/builtin/fstk/tabview.lua b/builtin/fstk/tabview.lua index 47603fb1..f6501156 100644 --- a/builtin/fstk/tabview.lua +++ b/builtin/fstk/tabview.lua @@ -1,18 +1,18 @@ --Minetest --Copyright (C) 2014 sapier -- ---self program is free software; you can redistribute it and/or modify +--This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- ---self program is distributed in the hope that it will be useful, +--This program 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 Lesser General Public License for more details. -- --You should have received a copy of the GNU Lesser General Public License along ---with self program; if not, write to the Free Software Foundation, Inc., +--with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. @@ -61,7 +61,7 @@ local function get_formspec(self) local formspec = "" if not self.hidden and (self.parent == nil or not self.parent.hidden) then - + if self.parent == nil then local tsize = self.tablist[self.last_tab_index].tabsize or {width=self.width, height=self.height} @@ -87,11 +87,11 @@ local function handle_buttons(self,fields) if self.hidden then return false end - + if self:handle_tab_buttons(fields) then return true end - + if self.glb_btn_handler ~= nil and self.glb_btn_handler(self,fields) then return true @@ -112,16 +112,16 @@ end -------------------------------------------------------------------------------- local function handle_events(self,event) - + if self.hidden then return false end - + if self.glb_evt_handler ~= nil and self.glb_evt_handler(self,event) then return true end - + if self.tablist[self.last_tab_index].evt_handler ~= nil then return self.tablist[self.last_tab_index].evt_handler( @@ -131,7 +131,7 @@ local function handle_events(self,event) self.tablist[self.last_tab_index].tabdata ) end - + return false end @@ -160,16 +160,16 @@ local function switch_to_tab(self, index) self.tablist[self.last_tab_index].on_change("LEAVE", self.current_tab, self.tablist[index].name) end - + --update tabview data self.last_tab_index = index local old_tab = self.current_tab self.current_tab = self.tablist[index].name - + if (self.autosave_tab) then core.setting_set(self.name .. "_LAST",self.current_tab) end - + -- call for tab to enter if self.tablist[index].on_change ~= nil then self.tablist[index].on_change("ENTER", @@ -197,14 +197,14 @@ local function set_tab_by_name(self, name) return true end end - + return false end -------------------------------------------------------------------------------- local function hide_tabview(self) self.hidden=true - + --call on_change as we're not gonna show self tab any longer if self.tablist[self.last_tab_index].on_change ~= nil then self.tablist[self.last_tab_index].on_change("LEAVE", @@ -215,7 +215,7 @@ end -------------------------------------------------------------------------------- local function show_tabview(self) self.hidden=false - + -- call for tab to enter if self.tablist[self.last_tab_index].on_change ~= nil then self.tablist[self.last_tab_index].on_change("ENTER", @@ -265,7 +265,7 @@ function tabview_create(name, size, tabheaderpos) self.current_tab = nil self.last_tab_index = 1 self.tablist = {} - + self.autosave_tab = false ui.add(self) diff --git a/builtin/fstk/ui.lua b/builtin/fstk/ui.lua index 708ea19c..322c7be7 100644 --- a/builtin/fstk/ui.lua +++ b/builtin/fstk/ui.lua @@ -1,18 +1,18 @@ --Minetest --Copyright (C) 2014 sapier -- ---self program is free software; you can redistribute it and/or modify +--This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- ---self program is distributed in the hope that it will be useful, +--This program 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 Lesser General Public License for more details. -- --You should have received a copy of the GNU Lesser General Public License along ---with self program; if not, write to the Free Software Foundation, Inc., +--with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ui = {} @@ -23,7 +23,7 @@ ui.default = nil function ui.add(child) --TODO check child ui.childlist[child.name] = child - + return child.name end @@ -33,7 +33,7 @@ function ui.delete(child) if ui.childlist[child.name] == nil then return false end - + ui.childlist[child.name] = nil return true end @@ -54,17 +54,52 @@ end -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- +local function wordwrap_quickhack(str) + local res = "" + local ar = str:split("\n") + for i = 1, #ar do + local text = ar[i] + -- Hack to add word wrapping. + -- TODO: Add engine support for wrapping in formspecs + while #text > 80 do + if res ~= "" then + res = res .. "," + end + res = res .. core.formspec_escape(string.sub(text, 1, 79)) + text = string.sub(text, 80, #text) + end + if res ~= "" then + res = res .. "," + end + res = res .. core.formspec_escape(text) + end + return res +end + -------------------------------------------------------------------------------- function ui.update() local formspec = "" -- handle errors - if gamedata ~= nil and gamedata.errormessage ~= nil then - formspec = "size[12,3.2]" .. - "textarea[1,1;10,2;;ERROR: " .. - core.formspec_escape(gamedata.errormessage) .. - ";]".. - "button[4.5,2.5;3,0.5;btn_error_confirm;" .. fgettext("Ok") .. "]" + if gamedata ~= nil and gamedata.reconnect_requested then + formspec = wordwrap_quickhack(gamedata.errormessage or "") + formspec = "size[12,5]" .. + "label[0.5,0;" .. fgettext("The server has requested a reconnect:") .. + "]textlist[0.2,0.8;11.5,3.5;;" .. formspec .. + "]button[6,4.6;3,0.5;btn_reconnect_no;" .. fgettext("Main menu") .. "]" .. + "button[3,4.6;3,0.5;btn_reconnect_yes;" .. fgettext("Reconnect") .. "]" + elseif gamedata ~= nil and gamedata.errormessage ~= nil then + formspec = wordwrap_quickhack(gamedata.errormessage) + local error_title + if string.find(gamedata.errormessage, "ModError") then + error_title = fgettext("An error occured in a Lua script, such as a mod:") + else + error_title = fgettext("An error occured:") + end + formspec = "size[12,5]" .. + "label[0.5,0;" .. error_title .. + "]textlist[0.2,0.8;11.5,3.5;;" .. formspec .. + "]button[4.5,4.6;3,0.5;btn_error_confirm;" .. fgettext("Ok") .. "]" else local active_toplevel_ui_elements = 0 for key,value in pairs(ui.childlist) do @@ -77,7 +112,7 @@ function ui.update() end end end - + -- no need to show addons if there ain't a toplevel element if (active_toplevel_ui_elements > 0) then for key,value in pairs(ui.childlist) do @@ -92,11 +127,13 @@ function ui.update() end if (active_toplevel_ui_elements > 1) then - print("WARNING: ui manager detected more then one active ui element, self most likely isn't intended") + core.log("warning", "more than one active ui ".. + "element, self most likely isn't intended") end if (active_toplevel_ui_elements == 0) then - print("WARNING: not a single toplevel ui element active switching to default") + core.log("warning", "no toplevel ui element ".. + "active; switching to default") ui.childlist[ui.default]:show() formspec = ui.childlist[ui.default]:get_formspec() end @@ -106,13 +143,6 @@ end -------------------------------------------------------------------------------- function ui.handle_buttons(fields) - - if fields["btn_error_confirm"] then - gamedata.errormessage = nil - update_menu() - return - end - for key,value in pairs(ui.childlist) do local retval = value:handle_buttons(fields) @@ -127,7 +157,7 @@ end -------------------------------------------------------------------------------- function ui.handle_events(event) - + for key,value in pairs(ui.childlist) do if value.handle_events ~= nil then @@ -146,8 +176,15 @@ end -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- core.button_handler = function(fields) - if fields["btn_error_confirm"] then + if fields["btn_reconnect_yes"] then + gamedata.reconnect_requested = false gamedata.errormessage = nil + gamedata.do_reconnect = true + core.start() + return + elseif fields["btn_reconnect_no"] or fields["btn_error_confirm"] then + gamedata.errormessage = nil + gamedata.reconnect_requested = false ui.update() return end diff --git a/builtin/game/auth.lua b/builtin/game/auth.lua index 93b00998..423eb313 100644 --- a/builtin/game/auth.lua +++ b/builtin/game/auth.lua @@ -171,6 +171,7 @@ function core.register_authentication_handler(handler) end core.registered_auth_handler = handler core.registered_auth_handler_modname = core.get_current_modname() + handler.mod_origin = core.registered_auth_handler_modname end function core.get_auth_handler() diff --git a/builtin/game/chatcommands.lua b/builtin/game/chatcommands.lua index fbc91ef0..5f9fcfc7 100644 --- a/builtin/game/chatcommands.lua +++ b/builtin/game/chatcommands.lua @@ -10,6 +10,7 @@ function core.register_chatcommand(cmd, def) def.params = def.params or "" def.description = def.description or "" def.privs = def.privs or {} + def.mod_origin = core.get_current_modname() or "??" core.chatcommands[cmd] = def end @@ -37,6 +38,7 @@ core.register_on_chat_message(function(name, message) end local has_privs, missing_privs = core.check_player_privs(name, cmd_def.privs) if has_privs then + core.set_last_run_mod(cmd_def.mod_origin) local success, message = cmd_def.func(name, param) if message then core.chat_send_player(name, message) @@ -49,6 +51,27 @@ core.register_on_chat_message(function(name, message) return true -- Handled chat message end) +-- Parses a "range" string in the format of "here (number)" or +-- "(x1, y1, z1) (x2, y2, z2)", returning two position vectors +local function parse_range_str(player_name, str) + local p1, p2 + local args = str:split(" ") + + if args[1] == "here" then + p1, p2 = core.get_player_radius_area(player_name, tonumber(args[2])) + if p1 == nil then + return false, "Unable to get player " .. player_name .. " position" + end + else + p1, p2 = core.string_to_area(str) + if p1 == nil then + return false, "Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)" + end + end + + return p1, p2 +end + -- -- Chat commands -- @@ -189,7 +212,7 @@ core.register_chatcommand("revoke", { local revoke_privs = core.string_to_privs(revoke_priv_str) local privs = core.get_player_privs(revoke_name) for priv, _ in pairs(revoke_privs) do - if priv ~= "interact" and priv ~= "shout" and priv ~= "interact_extra" and + if priv ~= "interact" and priv ~= "shout" and not core.check_player_privs(name, {privs=true}) then return false, "Your privileges are insufficient." end @@ -413,40 +436,31 @@ core.register_chatcommand("set", { end, }) +core.register_chatcommand("emergeblocks", { + params = "(here [radius]) | ( )", + description = "starts loading (or generating, if inexistent) map blocks " + .. "contained in area pos1 to pos2", + privs = {server=true}, + func = function(name, param) + local p1, p2 = parse_range_str(name, param) + if p1 == false then + return false, p2 + end + + core.emerge_area(p1, p2) + return true, "Started emerge of area ranging from " .. + core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1) + end, +}) + core.register_chatcommand("deleteblocks", { params = "(here [radius]) | ( )", description = "delete map blocks contained in area pos1 to pos2", privs = {server=true}, func = function(name, param) - local p1 = {} - local p2 = {} - local args = param:split(" ") - if args[1] == "here" then - local player = core.get_player_by_name(name) - if player == nil then - core.log("error", "player is nil") - return false, "Unable to get current position; player is nil" - end - p1 = player:getpos() - p2 = p1 - - if #args >= 2 then - local radius = tonumber(args[2]) or 0 - p1 = vector.add(p1, radius) - p2 = vector.subtract(p2, radius) - end - else - local pos1, pos2 = unpack(param:split(") (")) - if pos1 == nil or pos2 == nil then - return false, "Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)" - end - - p1 = core.string_to_pos(pos1 .. ")") - p2 = core.string_to_pos("(" .. pos2) - - if p1 == nil or p2 == nil then - return false, "Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)" - end + local p1, p2 = parse_range_str(name, param) + if p1 == false then + return false, p2 end if core.delete_area(p1, p2) then @@ -530,22 +544,29 @@ core.register_chatcommand("giveme", { }) core.register_chatcommand("spawnentity", { - params = "", - description = "Spawn entity at your position", + params = " [,,]", + description = "Spawn entity at given (or your) position", privs = {give=true, interact=true}, func = function(name, param) - local entityname = string.match(param, "(.+)$") + local entityname, p = string.match(param, "^([^ ]+) *(.*)$") if not entityname then return false, "EntityName required" end - core.log("action", ("/spawnentity invoked, entityname=%q") - :format(entityname)) + core.log("action", ("%s invokes /spawnentity, entityname=%q") + :format(name, entityname)) local player = core.get_player_by_name(name) if player == nil then core.log("error", "Unable to spawn entity, player is nil") return false, "Unable to spawn entity, player is nil" end - local p = player:getpos() + if p == "" then + p = player:getpos() + else + p = core.string_to_pos(p) + if p == nil then + return false, "Invalid parameters ('" .. param .. "')" + end + end p.y = p.y + 1 core.add_entity(p, entityname) return true, ("%q spawned."):format(entityname) @@ -689,7 +710,7 @@ core.register_chatcommand("time", { local hour = (current_time - minutes) / 60 return true, ("Current time is %d:%02d"):format(hour, minutes) end - local player_privs = minetest.get_player_privs(name) + local player_privs = core.get_player_privs(name) if not player_privs.settime then return false, "You don't have permission to run this command " .. "(missing privilege: settime)." @@ -713,7 +734,7 @@ core.register_chatcommand("time", { return false, "Invalid minute (must be between 0 and 59 inclusive)." end core.set_timeofday((hour * 60 + minute) / 1440) - core.log("action", name .. " sets time to " .. hour .. ":" .. minute) + core.log("action", ("%s sets time to %d:%02d"):format(name, hour, minute)) return true, "Time of day changed." end, }) diff --git a/builtin/game/deprecated.lua b/builtin/game/deprecated.lua index bbe68be3..cd1cf5e2 100644 --- a/builtin/game/deprecated.lua +++ b/builtin/game/deprecated.lua @@ -3,9 +3,8 @@ -- -- Default material types -- -function digprop_err() - core.log("info", debug.traceback()) - core.log("info", "WARNING: The core.digprop_* functions are obsolete and need to be replaced by item groups.") +local function digprop_err() + core.log("deprecated", "The core.digprop_* functions are obsolete and need to be replaced by item groups.") end core.digprop_constanttime = digprop_err @@ -16,12 +15,12 @@ core.digprop_woodlike = digprop_err core.digprop_leaveslike = digprop_err core.digprop_glasslike = digprop_err -core.node_metadata_inventory_move_allow_all = function() - core.log("info", "WARNING: core.node_metadata_inventory_move_allow_all is obsolete and does nothing.") +function core.node_metadata_inventory_move_allow_all() + core.log("deprecated", "core.node_metadata_inventory_move_allow_all is obsolete and does nothing.") end -core.add_to_creative_inventory = function(itemstring) - core.log('info', "WARNING: core.add_to_creative_inventory: This function is deprecated and does nothing.") +function core.add_to_creative_inventory(itemstring) + core.log("deprecated", "core.add_to_creative_inventory: This function is deprecated and does nothing.") end -- @@ -32,7 +31,7 @@ local envref_deprecation_message_printed = false setmetatable(core.env, { __index = function(table, key) if not envref_deprecation_message_printed then - core.log("info", "WARNING: core.env:[...] is deprecated and should be replaced with core.[...]") + core.log("deprecated", "core.env:[...] is deprecated and should be replaced with core.[...]") envref_deprecation_message_printed = true end local func = core[key] @@ -50,4 +49,3 @@ setmetatable(core.env, { function core.rollback_get_last_node_actor(pos, range, seconds) return core.rollback_get_node_actions(pos, range, seconds, 1)[1] end - diff --git a/builtin/game/detached_inventory.lua b/builtin/game/detached_inventory.lua index e8f03b56..b5d106b0 100644 --- a/builtin/game/detached_inventory.lua +++ b/builtin/game/detached_inventory.lua @@ -13,6 +13,7 @@ function core.create_detached_inventory(name, callbacks) stuff.on_put = callbacks.on_put stuff.on_take = callbacks.on_take end + stuff.mod_origin = core.get_current_modname() or "??" core.detached_inventories[name] = stuff return core.create_detached_inventory_raw(name) end diff --git a/builtin/game/falling.lua b/builtin/game/falling.lua index 58f68fc5..5b5e806f 100644 --- a/builtin/game/falling.lua +++ b/builtin/game/falling.lua @@ -18,18 +18,6 @@ core.register_entity(":__builtin:falling_node", { set_node = function(self, node) self.node = node - local stack = ItemStack(node.name) - local itemtable = stack:to_table() - local itemname = nil - if itemtable then - itemname = stack:to_table().name - end - local item_texture = nil - local item_type = "" - if core.registered_items[itemname] then - item_texture = core.registered_items[itemname].inventory_image - item_type = core.registered_items[itemname].type - end local prop = { is_visible = true, textures = {node.name}, @@ -43,7 +31,9 @@ core.register_entity(":__builtin:falling_node", { on_activate = function(self, staticdata) self.object:set_armor_groups({immortal=1}) - self:set_node({name=staticdata}) + if staticdata then + self:set_node({name=staticdata}) + end end, on_step = function(self, dtime) diff --git a/builtin/game/features.lua b/builtin/game/features.lua index f082b0db..a5f17e54 100644 --- a/builtin/game/features.lua +++ b/builtin/game/features.lua @@ -12,9 +12,9 @@ core.features = { function core.has_feature(arg) if type(arg) == "table" then - missing_features = {} - result = true - for ft, _ in pairs(arg) do + local missing_features = {} + local result = true + for ftr in pairs(arg) do if not core.features[ftr] then missing_features[ftr] = true result = false diff --git a/builtin/game/init.lua b/builtin/game/init.lua index 3f82f85c..72e3f009 100644 --- a/builtin/game/init.lua +++ b/builtin/game/init.lua @@ -1,5 +1,5 @@ -local scriptpath = minetest.get_builtin_path()..DIR_DELIM +local scriptpath = core.get_builtin_path()..DIR_DELIM local commonpath = scriptpath.."common"..DIR_DELIM local gamepath = scriptpath.."game"..DIR_DELIM diff --git a/builtin/game/item.lua b/builtin/game/item.lua index d25f4eff..df5bb070 100644 --- a/builtin/game/item.lua +++ b/builtin/game/item.lua @@ -139,6 +139,19 @@ function core.dir_to_wallmounted(dir) end end +function core.wallmounted_to_dir(wallmounted) + -- table of dirs in wallmounted order + return ({[0] = {x = 0, y = 1, z = 0}, + {x = 0, y = -1, z = 0}, + {x = 1, y = 0, z = 0}, + {x = -1, y = 0, z = 0}, + {x = 0, y = 0, z = 1}, + {x = 0, y = 0, z = -1}}) + + --indexed into by the wallmounted in question + [wallmounted] +end + function core.get_node_drops(nodename, toolname) local drop = ItemStack({name=nodename}):get_definition().drop if drop == nil then @@ -349,12 +362,16 @@ function core.item_drop(itemstack, dropper, pos) v.y = v.y*2 + 2 v.z = v.z*2 obj:setvelocity(v) + return itemstack end else - core.add_item(pos, itemstack) + if core.add_item(pos, itemstack) then + return itemstack + end end - return itemstack + -- If we reach this, adding the object to the + -- environment failed end function core.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing) @@ -479,6 +496,15 @@ function core.node_dig(pos, node, digger) -- Run script hook local _, callback for _, callback in ipairs(core.registered_on_dignodes) do + local origin = core.callback_origins[callback] + if origin then + core.set_last_run_mod(origin.mod) + --print("Running " .. tostring(callback) .. + -- " (a " .. origin.name .. " callback in " .. origin.mod .. ")") + else + --print("No data associated with callback") + end + -- Copy pos and node because callback can modify them local pos_copy = {x=pos.x, y=pos.y, z=pos.z} local node_copy = {name=node.name, param1=node.param1, param2=node.param2} diff --git a/builtin/game/item_entity.lua b/builtin/game/item_entity.lua index 6425a10a..a8d7a186 100644 --- a/builtin/game/item_entity.lua +++ b/builtin/game/item_entity.lua @@ -4,11 +4,14 @@ function core.spawn_item(pos, item) -- Take item in any format local stack = ItemStack(item) local obj = core.add_entity(pos, "__builtin:item") - obj:get_luaentity():set_item(stack:to_string()) + -- Don't use obj if it couldn't be added to the map. + if obj then + obj:get_luaentity():set_item(stack:to_string()) + end return obj end --- If item_entity_ttl is not set, enity will have default life time +-- If item_entity_ttl is not set, enity will have default life time -- Setting it to -1 disables the feature local time_to_live = tonumber(core.setting_get("item_entity_ttl")) @@ -81,7 +84,7 @@ core.register_entity(":__builtin:item", { if data and type(data) == "table" then self.itemstring = data.itemstring self.always_collect = data.always_collect - if data.age then + if data.age then self.age = data.age + dtime_s else self.age = dtime_s @@ -197,9 +200,10 @@ core.register_entity(":__builtin:item", { end, on_punch = function(self, hitter) - if self.itemstring ~= '' then - local left = hitter:get_inventory():add_item("main", self.itemstring) - if not left:is_empty() then + local inv = hitter:get_inventory() + if inv and self.itemstring ~= '' then + local left = inv:add_item("main", self.itemstring) + if left and not left:is_empty() then self.itemstring = left:to_string() return end diff --git a/builtin/game/misc.lua b/builtin/game/misc.lua index a71d5d02..efd0f8dc 100644 --- a/builtin/game/misc.lua +++ b/builtin/game/misc.lua @@ -4,45 +4,107 @@ -- Misc. API functions -- -core.timers_to_add = {} -core.timers = {} -core.register_globalstep(function(dtime) - for _, timer in ipairs(core.timers_to_add) do - table.insert(core.timers, timer) - end - core.timers_to_add = {} - local index = 1 - while index <= #core.timers do - local timer = core.timers[index] - timer.time = timer.time - dtime +local timers = {} +local mintime +local function update_timers(delay) + mintime = false + local sub = 0 + for index = 1, #timers do + index = index - sub + local timer = timers[index] + timer.time = timer.time - delay if timer.time <= 0 then + core.set_last_run_mod(timer.mod_origin) timer.func(unpack(timer.args or {})) - table.remove(core.timers,index) + table.remove(timers, index) + sub = sub + 1 + elseif mintime then + mintime = math.min(mintime, timer.time) else - index = index + 1 + mintime = timer.time end end +end + +local timers_to_add +local function add_timers() + for _, timer in ipairs(timers_to_add) do + table.insert(timers, timer) + end + timers_to_add = false +end + +local delay = 0 +core.register_globalstep(function(dtime) + if not mintime then + -- abort if no timers are running + return + end + if timers_to_add then + add_timers() + end + delay = delay + dtime + if delay < mintime then + return + end + update_timers(delay) + delay = 0 end) function core.after(time, func, ...) assert(tonumber(time) and type(func) == "function", "Invalid core.after invocation") - table.insert(core.timers_to_add, {time=time, func=func, args={...}}) + if not mintime then + mintime = time + timers_to_add = {{ + time = time+delay, + func = func, + args = {...}, + mod_origin = core.get_last_run_mod(), + }} + return + end + mintime = math.min(mintime, time) + timers_to_add = timers_to_add or {} + timers_to_add[#timers_to_add+1] = { + time = time+delay, + func = func, + args = {...}, + mod_origin = core.get_last_run_mod(), + } end -function core.check_player_privs(name, privs) +function core.check_player_privs(player_or_name, ...) + local name = player_or_name + -- Check if we have been provided with a Player object. + if type(name) ~= "string" then + name = name:get_player_name() + end + + local requested_privs = {...} local player_privs = core.get_player_privs(name) local missing_privileges = {} - for priv, val in pairs(privs) do - if val then + + if type(requested_privs[1]) == "table" then + -- We were provided with a table like { privA = true, privB = true }. + for priv, value in pairs(requested_privs[1]) do + if value and not player_privs[priv] then + table.insert(missing_privileges, priv) + end + end + else + -- Only a list, we can process it directly. + for key, priv in pairs(requested_privs) do if not player_privs[priv] then table.insert(missing_privileges, priv) end end end + if #missing_privileges > 0 then return false, missing_privileges end + return true, "" end @@ -66,6 +128,25 @@ function core.get_connected_players() return temp_table end +-- Returns two position vectors representing a box of `radius` in each +-- direction centered around the player corresponding to `player_name` +function core.get_player_radius_area(player_name, radius) + local player = core.get_player_by_name(player_name) + if player == nil then + return nil + end + + local p1 = player:getpos() + local p2 = p1 + + if radius then + p1 = vector.subtract(p1, radius) + p2 = vector.add(p2, radius) + end + + return p1, p2 +end + function core.hash_node_position(pos) return (pos.z+32768)*65536*65536 + (pos.y+32768)*65536 + pos.x+32768 end diff --git a/builtin/game/register.lua b/builtin/game/register.lua index e5ba88f7..840ade12 100644 --- a/builtin/game/register.lua +++ b/builtin/game/register.lua @@ -72,6 +72,7 @@ end function core.register_abm(spec) -- Add to core.registered_abms core.registered_abms[#core.registered_abms+1] = spec + spec.mod_origin = core.get_current_modname() or "??" end function core.register_entity(name, prototype) @@ -86,6 +87,7 @@ function core.register_entity(name, prototype) -- Add to core.registered_entities core.registered_entities[name] = prototype + prototype.mod_origin = core.get_current_modname() or "??" end function core.register_item(name, itemdef) @@ -147,6 +149,8 @@ function core.register_item(name, itemdef) end -- END Legacy stuff + itemdef.mod_origin = core.get_current_modname() or "??" + -- Disable all further modifications getmetatable(itemdef).__newindex = {} @@ -217,7 +221,7 @@ function core.register_alias(name, convert_to) error("Unable to register alias: Name is forbidden: " .. name) end if core.registered_items[name] ~= nil then - core.log("WARNING: Not registering alias, item with same name" .. + core.log("warning", "Not registering alias, item with same name" .. " is already defined: " .. name .. " -> " .. convert_to) else --core.log("Registering alias: " .. name .. " -> " .. convert_to) @@ -326,6 +330,8 @@ function core.override_item(name, redefinition) end +core.callback_origins = {} + function core.run_callbacks(callbacks, mode, ...) assert(type(callbacks) == "table") local cb_len = #callbacks @@ -338,6 +344,14 @@ function core.run_callbacks(callbacks, mode, ...) end local ret = nil for i = 1, cb_len do + local origin = core.callback_origins[callbacks[i]] + if origin then + core.set_last_run_mod(origin.mod) + --print("Running " .. tostring(callbacks[i]) .. + -- " (a " .. origin.name .. " callback in " .. origin.mod .. ")") + else + --print("No data associated with callback") + end local cb_ret = callbacks[i](...) if mode == 0 and i == 1 then @@ -370,13 +384,29 @@ end local function make_registration() local t = {} - local registerfunc = function(func) table.insert(t, func) end + local registerfunc = function(func) + table.insert(t, func) + core.callback_origins[func] = { + mod = core.get_current_modname() or "??", + name = debug.getinfo(1, "n").name or "??" + } + --local origin = core.callback_origins[func] + --print(origin.name .. ": " .. origin.mod .. " registering cbk " .. tostring(func)) + end return t, registerfunc end local function make_registration_reverse() local t = {} - local registerfunc = function(func) table.insert(t, 1, func) end + local registerfunc = function(func) + table.insert(t, 1, func) + core.callback_origins[func] = { + mod = core.get_current_modname() or "??", + name = debug.getinfo(1, "n").name or "??" + } + --local origin = core.callback_origins[func] + --print(origin.name .. ": " .. origin.mod .. " registering cbk " .. tostring(func)) + end return t, registerfunc end @@ -407,6 +437,40 @@ local function make_registration_wrap(reg_fn_name, clear_fn_name) return list end +core.registered_on_player_hpchanges = { modifiers = { }, loggers = { } } + +function core.registered_on_player_hpchange(player, hp_change) + local last = false + for i = #core.registered_on_player_hpchanges.modifiers, 1, -1 do + local func = core.registered_on_player_hpchanges.modifiers[i] + hp_change, last = func(player, hp_change) + if type(hp_change) ~= "number" then + local debuginfo = debug.getinfo(func) + error("The register_on_hp_changes function has to return a number at " .. + debuginfo.short_src .. " line " .. debuginfo.linedefined) + end + if last then + break + end + end + for i, func in ipairs(core.registered_on_player_hpchanges.loggers) do + func(player, hp_change) + end + return hp_change +end + +function core.register_on_player_hpchange(func, modifier) + if modifier then + table.insert(core.registered_on_player_hpchanges.modifiers, func) + else + table.insert(core.registered_on_player_hpchanges.loggers, func) + end + core.callback_origins[func] = { + mod = core.get_current_modname() or "??", + name = debug.getinfo(1, "n").name or "??" + } +end + core.registered_biomes = make_registration_wrap("register_biome", "clear_registered_biomes") core.registered_ores = make_registration_wrap("register_ore", "clear_registered_ores") core.registered_decorations = make_registration_wrap("register_decoration", "clear_registered_decorations") diff --git a/builtin/init.lua b/builtin/init.lua index 095771d1..02fb9db9 100644 --- a/builtin/init.lua +++ b/builtin/init.lua @@ -6,7 +6,7 @@ -- -- Initialize some very basic things -print = core.debug +function core.debug(...) core.log(table.concat({...}, "\t")) end math.randomseed(os.time()) os.setlocale("C", "numeric") minetest = core diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua index d6e2588f..6a9895f6 100644 --- a/builtin/mainmenu/common.lua +++ b/builtin/mainmenu/common.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, @@ -224,17 +224,23 @@ function menu_handle_key_up_down(fields,textlist,settingname) configure_selected_world_params(newidx) end - + return true end - + return false end -------------------------------------------------------------------------------- function asyncOnlineFavourites() - menudata.favorites = {} + if not menudata.public_known then + menudata.public_known = {{ + name = fgettext("Loading..."), + description = fgettext_ne("Try reenabling public serverlist and check your internet connection.") + }} + end + menudata.favorites = menudata.public_known core.handle_async( function(param) return core.get_favorites("online") @@ -242,51 +248,100 @@ function asyncOnlineFavourites() nil, function(result) if core.setting_getbool("public_serverlist") then - menudata.favorites = order_favorite_list(result) + local favs = order_favorite_list(result) + if favs[1] then + menudata.public_known = favs + menudata.favorites = menudata.public_known + end core.event_handler("Refresh") end end - ) + ) end -------------------------------------------------------------------------------- function text2textlist(xpos,ypos,width,height,tl_name,textlen,text,transparency) local textlines = core.splittext(text,textlen) - + local retval = "textlist[" .. xpos .. "," .. ypos .. ";" .. width .. "," .. height .. ";" .. tl_name .. ";" - + for i=1, #textlines, 1 do textlines[i] = textlines[i]:gsub("\r","") retval = retval .. core.formspec_escape(textlines[i]) .. "," end - + retval = retval .. ";0;" - + if transparency then retval = retval .. "true" end - + retval = retval .. "]" return retval end -------------------------------------------------------------------------------- -function is_server_protocol_compat(proto_min, proto_max) - return not ((min_supp_proto > (proto_max or 24)) or (max_supp_proto < (proto_min or 13))) +function is_server_protocol_compat(server_proto_min, server_proto_max) + return not ((min_supp_proto > (server_proto_max or 24)) or (max_supp_proto < (server_proto_min or 13))) end -------------------------------------------------------------------------------- -function is_server_protocol_compat_or_error(proto_min, proto_max) - if not is_server_protocol_compat(proto_min, proto_max) then - gamedata.errormessage = fgettext_ne("Protocol version mismatch, server " .. - ((proto_min ~= proto_max) and "supports protocols between $1 and $2" or "enforces protocol version $1") .. - ", we " .. - ((min_supp_proto ~= max_supp_proto) and "support protocols between version $3 and $4." or "only support protocol version $3"), - proto_min or 13, proto_max or 24, min_supp_proto, max_supp_proto) +function is_server_protocol_compat_or_error(server_proto_min, server_proto_max) + if not is_server_protocol_compat(server_proto_min, server_proto_max) then + local server_prot_ver_info + local client_prot_ver_info + if server_proto_min ~= server_proto_max then + server_prot_ver_info = fgettext_ne("Server supports protocol versions between $1 and $2. ", + server_proto_min or 13, server_proto_max or 24) + else + server_prot_ver_info = fgettext_ne("Server enforces protocol version $1. ", + server_proto_min or 13) + end + if min_supp_proto ~= max_supp_proto then + client_prot_ver_info= fgettext_ne("We support protocol versions between version $1 and $2.", + min_supp_proto, max_supp_proto) + else + client_prot_ver_info = fgettext_ne("We only support protocol version $1.", min_supp_proto) + end + gamedata.errormessage = fgettext_ne("Protocol version mismatch. ") + .. server_prot_ver_info + .. client_prot_ver_info return false end return true end +-------------------------------------------------------------------------------- +function menu_worldmt(selected, setting, value) + local world = menudata.worldlist:get_list()[selected] + if world then + local filename = world.path .. DIR_DELIM .. "world.mt" + local world_conf = Settings(filename) + + if value ~= nil then + if not world_conf:write() then + core.log("error", "Failed to write world config file") + end + world_conf:set(setting, value) + world_conf:write() + else + return world_conf:get(setting) + end + else + return nil + end +end + +function menu_worldmt_legacy(selected) + local modes_names = {"creative_mode", "enable_damage", "server_announce"} + for _, mode_name in pairs(modes_names) do + local mode_val = menu_worldmt(selected, mode_name) + if mode_val ~= nil then + core.setting_set(mode_name, mode_val) + else + menu_worldmt(selected, mode_name, core.setting_get(mode_name)) + end + end +end diff --git a/builtin/mainmenu/dlg_config_world.lua b/builtin/mainmenu/dlg_config_world.lua index 4d13faea..bb39eb16 100644 --- a/builtin/mainmenu/dlg_config_world.lua +++ b/builtin/mainmenu/dlg_config_world.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, diff --git a/builtin/mainmenu/dlg_create_world.lua b/builtin/mainmenu/dlg_create_world.lua index b42d119e..d8896bf9 100644 --- a/builtin/mainmenu/dlg_create_world.lua +++ b/builtin/mainmenu/dlg_create_world.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, diff --git a/builtin/mainmenu/dlg_delete_mod.lua b/builtin/mainmenu/dlg_delete_mod.lua index 6e00b804..f40f6b9e 100644 --- a/builtin/mainmenu/dlg_delete_mod.lua +++ b/builtin/mainmenu/dlg_delete_mod.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, diff --git a/builtin/mainmenu/dlg_delete_world.lua b/builtin/mainmenu/dlg_delete_world.lua index aa710ef3..76783021 100644 --- a/builtin/mainmenu/dlg_delete_world.lua +++ b/builtin/mainmenu/dlg_delete_world.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, diff --git a/builtin/mainmenu/dlg_rename_modpack.lua b/builtin/mainmenu/dlg_rename_modpack.lua index 9e252408..9c48cf3f 100644 --- a/builtin/mainmenu/dlg_rename_modpack.lua +++ b/builtin/mainmenu/dlg_rename_modpack.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, diff --git a/builtin/mainmenu/gamemgr.lua b/builtin/mainmenu/gamemgr.lua index b6faa71d..c649c944 100644 --- a/builtin/mainmenu/gamemgr.lua +++ b/builtin/mainmenu/gamemgr.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, diff --git a/builtin/mainmenu/init.lua b/builtin/mainmenu/init.lua index 176796be..7bf73e57 100644 --- a/builtin/mainmenu/init.lua +++ b/builtin/mainmenu/init.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, diff --git a/builtin/mainmenu/modmgr.lua b/builtin/mainmenu/modmgr.lua index 89292ed5..4bd05690 100644 --- a/builtin/mainmenu/modmgr.lua +++ b/builtin/mainmenu/modmgr.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, diff --git a/builtin/mainmenu/store.lua b/builtin/mainmenu/store.lua index ad861082..974cebe5 100644 --- a/builtin/mainmenu/store.lua +++ b/builtin/mainmenu/store.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, diff --git a/builtin/mainmenu/tab_credits.lua b/builtin/mainmenu/tab_credits.lua index 77cd355d..c32a4dc2 100644 --- a/builtin/mainmenu/tab_credits.lua +++ b/builtin/mainmenu/tab_credits.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, @@ -25,46 +25,56 @@ tab_credits = { return "label[0.5,3.2;Minetest " .. core.get_version() .. "]" .. "label[0.5,3.5;http://minetest.net]" .. "image[0.5,1;" .. core.formspec_escape(logofile) .. "]" .. - "textlist[3.5,-0.25;8.5,5.8;list_credits;" .. - "#FFFF00" .. fgettext("Core Developers") .."," .. - "Perttu Ahola (celeron55) ,".. - "Ryan Kwolek (kwolekr) ,".. - "PilzAdam ," .. - "Lisa Milne (darkrose) ,".. - "Maciej Kasatkin (RealBadAngel) ,".. - "sfan5 ,".. - "kahrl ,".. - "sapier,".. - "ShadowNinja ,".. - "Nathanael Courant (Nore/Novatux) ,".. - "BlockMen,".. - "Craig Robbins (Zeno),".. - "Loic Blot (nerzhul/nrz),".. - "paramat,".. - ",".. - "#FFFF00" .. fgettext("Active Contributors") .. "," .. - "SmallJoker ," .. - "est31 ," .. - "gregorycu,".. - "Andrew Ward (rubenwardy) ," .. - "TriBlade9 ,".. - "Zefram ,".. - "," .. - "#FFFF00" .. fgettext("Previous Contributors") .. "," .. - "Vanessa Ezekowitz (VanessaE) ,".. - "Jurgen Doser (doserj) ,".. - "Jeija ,".. - "MirceaKitsune ,".. - "dannydark ,".. - "0gb.us <0gb.us@0gb.us>,".. - "proller ,".. - "Ilya Zhuravlev (xyz) ,".. - "Guiseppe Bilotta (Oblomov) ,".. - "Jonathan Neuschafer ,".. - "Nils Dagsson Moskopp (erlehmann) ,".. - "Constantin Wenger (SpeedProg) ,".. - "matttpt ,".. - "JacobF ,".. - ";0;true]" + "tablecolumns[color;text]" .. + "tableoptions[background=#00000000;highlight=#00000000;border=false]" .. + "table[3.5,-0.25;8.5,5.8;list_credits;" .. + "#FFFF00," .. fgettext("Core Developers") .."," .. + ",Perttu Ahola (celeron55) ,".. + ",Ryan Kwolek (kwolekr) ,".. + ",PilzAdam ," .. + ",sfan5 ,".. + ",kahrl ,".. + ",sapier,".. + ",ShadowNinja ,".. + ",Nathanael Courant (Nore/Ekdohibs) ,".. + ",BlockMen,".. + ",Craig Robbins (Zeno),".. + ",Loic Blot (nerzhul/nrz) ,".. + ",Mat Gregory (paramat),".. + ",est31 ," .. + ",,".. + "#FFFF00," .. fgettext("Active Contributors") .. "," .. + ",SmallJoker ," .. + ",Andrew Ward (rubenwardy) ," .. + ",Aaron Suen ," .. + ",Sokomine ," .. + ",Břetislav Štec (t0suj4/TBC_x)," .. + ",TeTpaAka," .. + ",Jean-Patrick G (kilbith) ," .. + ",Diego Martinez (kaeza) ," .. + ",," .. + "#FFFF00," .. fgettext("Previous Core Developers") .."," .. + ",Maciej Kasatkin (RealBadAngel) ,".. + ",Lisa Milne (darkrose) ," .. + ",proller," .. + ",Ilya Zhuravlev (xyz) ," .. + ",," .. + "#FFFF00," .. fgettext("Previous Contributors") .. "," .. + ",Vanessa Ezekowitz (VanessaE) ,".. + ",Jurgen Doser (doserj) ,".. + ",Gregory Currie (gregorycu)," .. + ",Jeija ,".. + ",MirceaKitsune ,".. + ",dannydark ,".. + ",0gb.us <0gb.us@0gb.us>,".. + ",Guiseppe Bilotta (Oblomov) ,".. + ",Jonathan Neuschafer ,".. + ",Nils Dagsson Moskopp (erlehmann) ,".. + ",Constantin Wenger (SpeedProg) ,".. + ",matttpt ,".. + ",JacobF ,".. + ",TriBlade9 ,".. + ",Zefram ,".. + ";1]" end } diff --git a/builtin/mainmenu/tab_mods.lua b/builtin/mainmenu/tab_mods.lua index 901f1455..45c62ced 100644 --- a/builtin/mainmenu/tab_mods.lua +++ b/builtin/mainmenu/tab_mods.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, @@ -36,7 +36,10 @@ local function get_formspec(tabview, name, tabdata) -- "label[0.8,4.2;" .. fgettext("Add mod:") .. "]" .. -- TODO Disabled due to upcoming release 0.4.8 and irrlicht messing up localization -- "button[0.75,4.85;1.8,0.5;btn_mod_mgr_install_local;".. fgettext("Local install") .. "]" .. - "button[0,4.85;5.25,0.5;btn_modstore;".. fgettext("Online mod repository") .. "]" + +-- TODO Disabled due to service being offline, and not likely to come online again, in this form +-- "button[0,4.85;5.25,0.5;btn_modstore;".. fgettext("Online mod repository") .. "]" + "" local selected_mod = nil diff --git a/builtin/mainmenu/tab_multiplayer.lua b/builtin/mainmenu/tab_multiplayer.lua index 57025971..f734353c 100644 --- a/builtin/mainmenu/tab_multiplayer.lua +++ b/builtin/mainmenu/tab_multiplayer.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, diff --git a/builtin/mainmenu/tab_server.lua b/builtin/mainmenu/tab_server.lua index d78af768..b671a76c 100644 --- a/builtin/mainmenu/tab_server.lua +++ b/builtin/mainmenu/tab_server.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, @@ -67,32 +67,9 @@ local function main_button_handler(this, fields, name, tabdata) if fields["srv_worlds"] ~= nil then local event = core.explode_textlist_event(fields["srv_worlds"]) - local selected = core.get_textlist_index("srv_worlds") - if selected ~= nil then - local filename = menudata.worldlist:get_list()[selected].path - local worldconfig = modmgr.get_worldconfig(filename) - filename = filename .. DIR_DELIM .. "world.mt" - if worldconfig.creative_mode ~= nil then - core.setting_set("creative_mode", worldconfig.creative_mode) - else - local worldfile = Settings(filename) - worldfile:set("creative_mode", core.setting_get("creative_mode")) - if not worldfile:write() then - core.log("error", "Failed to write world config file") - end - end - if worldconfig.enable_damage ~= nil then - core.setting_set("enable_damage", worldconfig.enable_damage) - else - local worldfile = Settings(filename) - worldfile:set("enable_damage", core.setting_get("enable_damage")) - if not worldfile:write() then - core.log("error", "Failed to write world config file") - end - end - end + menu_worldmt_legacy(selected) if event.type == "DCL" then world_doubleclick = true @@ -111,33 +88,24 @@ local function main_button_handler(this, fields, name, tabdata) if fields["cb_creative_mode"] then core.setting_set("creative_mode", fields["cb_creative_mode"]) local selected = core.get_textlist_index("srv_worlds") - local filename = menudata.worldlist:get_list()[selected].path .. - DIR_DELIM .. "world.mt" + menu_worldmt(selected, "creative_mode", fields["cb_creative_mode"]) - local worldfile = Settings(filename) - worldfile:set("creative_mode", fields["cb_creative_mode"]) - if not worldfile:write() then - core.log("error", "Failed to write world config file") - end return true end if fields["cb_enable_damage"] then core.setting_set("enable_damage", fields["cb_enable_damage"]) local selected = core.get_textlist_index("srv_worlds") - local filename = menudata.worldlist:get_list()[selected].path .. - DIR_DELIM .. "world.mt" + menu_worldmt(selected, "enable_damage", fields["cb_enable_damage"]) - local worldfile = Settings(filename) - worldfile:set("enable_damage", fields["cb_enable_damage"]) - if not worldfile:write() then - core.log("error", "Failed to write world config file") - end return true end if fields["cb_server_announce"] then core.setting_set("server_announce", fields["cb_server_announce"]) + local selected = core.get_textlist_index("srv_worlds") + menu_worldmt(selected, "server_announce", fields["cb_server_announce"]) + return true end @@ -145,12 +113,12 @@ local function main_button_handler(this, fields, name, tabdata) world_doubleclick or fields["key_enter"] then local selected = core.get_textlist_index("srv_worlds") - if selected ~= nil then + gamedata.selected_world = menudata.worldlist:get_raw_index(selected) + if selected ~= nil and gamedata.selected_world ~= 0 then gamedata.playername = fields["te_playername"] gamedata.password = fields["te_passwd"] gamedata.port = fields["te_serverport"] gamedata.address = "" - gamedata.selected_world = menudata.worldlist:get_raw_index(selected) core.setting_set("port",gamedata.port) if fields["te_serveraddr"] ~= nil then @@ -159,12 +127,17 @@ local function main_button_handler(this, fields, name, tabdata) --update last game local world = menudata.worldlist:get_raw_element(gamedata.selected_world) + if world then + local game, index = gamemgr.find_by_gameid(world.gameid) + core.setting_set("menu_last_game", game.id) + end - local game,index = gamemgr.find_by_gameid(world.gameid) - core.setting_set("menu_last_game",game.id) core.start() - return true + else + gamedata.errormessage = + fgettext("No world created or selected!") end + return true end if fields["world_create"] ~= nil then diff --git a/builtin/mainmenu/tab_settings.lua b/builtin/mainmenu/tab_settings.lua index 881a6349..0ab673f1 100644 --- a/builtin/mainmenu/tab_settings.lua +++ b/builtin/mainmenu/tab_settings.lua @@ -1,9 +1,9 @@ --Minetest ---Copyright (C) 2013 sapier +--Copyright (C) 2015 PilzAdam -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, @@ -15,387 +15,724 @@ --with this program; if not, write to the Free Software Foundation, Inc., --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. --------------------------------------------------------------------------------- +local FILENAME = "settingtypes.txt" -local dd_filter_labels = { - fgettext("No Filter"), - fgettext("Bilinear Filter"), - fgettext("Trilinear Filter") +local CHAR_CLASSES = { + SPACE = "[%s]", + VARIABLE = "[%w_%-%.]", + INTEGER = "[-]?[%d]", + FLOAT = "[-]?[%d%.]", + FLAGS = "[%w_%-%.,]", } -local filters = { - {dd_filter_labels[1]..","..dd_filter_labels[2]..","..dd_filter_labels[3]}, - {"", "bilinear_filter", "trilinear_filter"}, -} - -local dd_mipmap_labels = { - fgettext("No Mipmap"), - fgettext("Mipmap"), - fgettext("Mipmap + Aniso. Filter") -} - -local mipmap = { - {dd_mipmap_labels[1]..","..dd_mipmap_labels[2]..","..dd_mipmap_labels[3]}, - {"", "mip_map", "anisotropic_filter"}, -} - -local function getFilterSettingIndex() - if (core.setting_get(filters[2][3]) == "true") then - return 3 - end - if (core.setting_get(filters[2][3]) == "false" and core.setting_get(filters[2][2]) == "true") then - return 2 - end - return 1 -end - -local function getMipmapSettingIndex() - if (core.setting_get(mipmap[2][3]) == "true") then - return 3 - end - if (core.setting_get(mipmap[2][3]) == "false" and core.setting_get(mipmap[2][2]) == "true") then - return 2 - end - return 1 -end - -local function video_driver_fname_to_name(selected_driver) - local video_drivers = core.get_video_drivers() - - for i=1, #video_drivers do - if selected_driver == video_drivers[i].friendly_name then - return video_drivers[i].name:lower() - end - end - - return "" -end - -local function dlg_confirm_reset_formspec(data) - local retval = - "size[8,3]" .. - "label[1,1;".. fgettext("Are you sure to reset your singleplayer world?") .. "]".. - "button[1,2;2.6,0.5;dlg_reset_singleplayer_confirm;".. - fgettext("Yes") .. "]" .. - "button[4,2;2.8,0.5;dlg_reset_singleplayer_cancel;".. - fgettext("No!!!") .. "]" - return retval -end - -local function dlg_confirm_reset_btnhandler(this, fields, dialogdata) - - if fields["dlg_reset_singleplayer_confirm"] ~= nil then - local worldlist = core.get_worlds() - local found_singleplayerworld = false - - for i=1,#worldlist,1 do - if worldlist[i].name == "singleplayerworld" then - found_singleplayerworld = true - gamedata.worldindex = i - end - end - - if found_singleplayerworld then - core.delete_world(gamedata.worldindex) - end - - core.create_world("singleplayerworld", 1) - - worldlist = core.get_worlds() - - found_singleplayerworld = false - - for i=1,#worldlist,1 do - if worldlist[i].name == "singleplayerworld" then - found_singleplayerworld = true - gamedata.worldindex = i - end - end - end - - this.parent:show() - this:hide() - this:delete() - return true -end - -local function showconfirm_reset(tabview) - local new_dlg = dialog_create("reset_spworld", - dlg_confirm_reset_formspec, - dlg_confirm_reset_btnhandler, - nil) - new_dlg:set_parent(tabview) - tabview:hide() - new_dlg:show() -end - -local function gui_scale_to_scrollbar() - local current_value = tonumber(core.setting_get("gui_scaling")) - - if (current_value == nil) or current_value < 0.25 then - return 0 - end - if current_value <= 1.25 then - return ((current_value - 0.25)/ 1.0) * 700 - end - if current_value <= 6 then - return ((current_value -1.25) * 100) + 700 - end - - return 1000 -end - -local function scrollbar_to_gui_scale(value) - value = tonumber(value) - - if (value <= 700) then - return ((value / 700) * 1.0) + 0.25 - end - if (value <=1000) then - return ((value - 700) / 100) + 1.25 - end - - return 1 -end - -local function formspec(tabview, name, tabdata) - local video_drivers = core.get_video_drivers() - local current_video_driver = core.setting_get("video_driver"):lower() - - local driver_formspec_string = "" - local driver_current_idx = 0 - - for i=2, #video_drivers do - driver_formspec_string = driver_formspec_string .. video_drivers[i].friendly_name - if i ~= #video_drivers then - driver_formspec_string = driver_formspec_string .. "," - end - - if current_video_driver == video_drivers[i].name:lower() then - driver_current_idx = i - 1 - end - end - - local tab_string = - "box[0,0;3.5,3.9;#999999]" .. - "checkbox[0.25,0;cb_smooth_lighting;".. fgettext("Smooth Lighting") - .. ";".. dump(core.setting_getbool("smooth_lighting")) .. "]".. - "checkbox[0.25,0.5;cb_particles;".. fgettext("Enable Particles") .. ";" - .. dump(core.setting_getbool("enable_particles")) .. "]".. - "checkbox[0.25,1;cb_3d_clouds;".. fgettext("3D Clouds") .. ";" - .. dump(core.setting_getbool("enable_3d_clouds")) .. "]".. - "checkbox[0.25,1.5;cb_fancy_trees;".. fgettext("Fancy Trees") .. ";" - .. dump(core.setting_getbool("new_style_leaves")) .. "]".. - "checkbox[0.25,2.0;cb_opaque_water;".. fgettext("Opaque Water") .. ";" - .. dump(core.setting_getbool("opaque_water")) .. "]".. - "checkbox[0.25,2.5;cb_connected_glass;".. fgettext("Connected Glass") .. ";" - .. dump(core.setting_getbool("connected_glass")) .. "]".. - "checkbox[0.25,3.0;cb_node_highlighting;".. fgettext("Node Highlighting") .. ";" - .. dump(core.setting_getbool("enable_node_highlighting")) .. "]".. - "box[3.75,0;3.75,3.45;#999999]" .. - "label[3.85,0.1;".. fgettext("Texturing:") .. "]".. - "dropdown[3.85,0.55;3.85;dd_filters;" .. filters[1][1] .. ";" - .. getFilterSettingIndex() .. "]" .. - "dropdown[3.85,1.35;3.85;dd_mipmap;" .. mipmap[1][1] .. ";" - .. getMipmapSettingIndex() .. "]" .. - "label[3.85,2.15;".. fgettext("Rendering:") .. "]".. - "dropdown[3.85,2.6;3.85;dd_video_driver;" - .. driver_formspec_string .. ";" .. driver_current_idx .. "]" .. - "tooltip[dd_video_driver;" .. - fgettext("Restart minetest for driver change to take effect") .. "]" .. - "box[7.75,0;4,4;#999999]" .. - "checkbox[8,0;cb_shaders;".. fgettext("Shaders") .. ";" - .. dump(core.setting_getbool("enable_shaders")) .. "]" - - if PLATFORM ~= "Android" then - tab_string = tab_string .. - "button[8,4.75;3.75,0.5;btn_change_keys;".. fgettext("Change keys") .. "]" - else - tab_string = tab_string .. - "button[8,4.75;3.75,0.5;btn_reset_singleplayer;".. fgettext("Reset singleplayer world") .. "]" - end - tab_string = tab_string .. - "box[0,4.25;3.5,1.1;#999999]" .. - "label[0.25,4.25;" .. fgettext("GUI scale factor") .. "]" .. - "scrollbar[0.25,4.75;3,0.4;sb_gui_scaling;horizontal;" .. - gui_scale_to_scrollbar() .. "]" .. - "tooltip[sb_gui_scaling;" .. - fgettext("Scaling factor applied to menu elements: ") .. - dump(core.setting_get("gui_scaling")) .. "]" - - if PLATFORM == "Android" then - tab_string = tab_string .. - "box[3.75,3.55;3.75,1.8;#999999]" .. - "checkbox[3.9,3.45;cb_touchscreen_target;".. fgettext("Touch free target") .. ";" - .. dump(core.setting_getbool("touchtarget")) .. "]" - end - - if core.setting_get("touchscreen_threshold") ~= nil then - tab_string = tab_string .. - "label[4.3,4.1;" .. fgettext("Touchthreshold (px)") .. "]" .. - "dropdown[3.85,4.55;3.85;dd_touchthreshold;0,10,20,30,40,50;" .. - ((tonumber(core.setting_get("touchscreen_threshold"))/10)+1) .. "]" - end - - if core.setting_getbool("enable_shaders") then - tab_string = tab_string .. - "checkbox[8,0.5;cb_bumpmapping;".. fgettext("Bumpmapping") .. ";" - .. dump(core.setting_getbool("enable_bumpmapping")) .. "]".. - "checkbox[8,1.0;cb_generate_normalmaps;".. fgettext("Generate Normalmaps") .. ";" - .. dump(core.setting_getbool("generate_normalmaps")) .. "]".. - "checkbox[8,1.5;cb_parallax;".. fgettext("Parallax Occlusion") .. ";" - .. dump(core.setting_getbool("enable_parallax_occlusion")) .. "]".. - "checkbox[8,2.0;cb_waving_water;".. fgettext("Waving Water") .. ";" - .. dump(core.setting_getbool("enable_waving_water")) .. "]".. - "checkbox[8,2.5;cb_waving_leaves;".. fgettext("Waving Leaves") .. ";" - .. dump(core.setting_getbool("enable_waving_leaves")) .. "]".. - "checkbox[8,3.0;cb_waving_plants;".. fgettext("Waving Plants") .. ";" - .. dump(core.setting_getbool("enable_waving_plants")) .. "]" - else - tab_string = tab_string .. - "textlist[8.33,0.7;4,1;;#888888" .. fgettext("Bumpmapping") .. ";0;true]" .. - "textlist[8.33,1.2;4,1;;#888888" .. fgettext("Generate Normalmaps") .. ";0;true]" .. - "textlist[8.33,1.7;4,1;;#888888" .. fgettext("Parallax Occlusion") .. ";0;true]" .. - "textlist[8.33,2.2;4,1;;#888888" .. fgettext("Waving Water") .. ";0;true]" .. - "textlist[8.33,2.7;4,1;;#888888" .. fgettext("Waving Leaves") .. ";0;true]" .. - "textlist[8.33,3.2;4,1;;#888888" .. fgettext("Waving Plants") .. ";0;true]" - end - return tab_string -end - --------------------------------------------------------------------------------- -local function handle_settings_buttons(this, fields, tabname, tabdata) - if fields["cb_fancy_trees"] then - core.setting_set("new_style_leaves", fields["cb_fancy_trees"]) - return true - end - if fields["cb_smooth_lighting"] then - core.setting_set("smooth_lighting", fields["cb_smooth_lighting"]) - return true - end - if fields["cb_3d_clouds"] then - core.setting_set("enable_3d_clouds", fields["cb_3d_clouds"]) - return true - end - if fields["cb_opaque_water"] then - core.setting_set("opaque_water", fields["cb_opaque_water"]) - return true - end - if fields["cb_shaders"] then - if (core.setting_get("video_driver") == "direct3d8" or core.setting_get("video_driver") == "direct3d9") then - core.setting_set("enable_shaders", "false") - gamedata.errormessage = fgettext("To enable shaders the OpenGL driver needs to be used.") +-- returns error message, or nil +local function parse_setting_line(settings, line, read_all, base_level, allow_secure) + -- comment + local comment = line:match("^#" .. CHAR_CLASSES.SPACE .. "*(.*)$") + if comment then + if settings.current_comment == "" then + settings.current_comment = comment else - core.setting_set("enable_shaders", fields["cb_shaders"]) + settings.current_comment = settings.current_comment .. "\n" .. comment + end + return + end + + -- clear current_comment so only comments directly above a setting are bound to it + -- but keep a local reference to it for variables in the current line + local current_comment = settings.current_comment + settings.current_comment = "" + + -- empty lines + if line:match("^" .. CHAR_CLASSES.SPACE .. "*$") then + return + end + + -- category + local stars, category = line:match("^%[([%*]*)([^%]]+)%]$") + if category then + table.insert(settings, { + name = category, + level = stars:len() + base_level, + type = "category", + }) + return + end + + -- settings + local first_part, name, readable_name, setting_type = line:match("^" + -- this first capture group matches the whole first part, + -- so we can later strip it from the rest of the line + .. "(" + .. "([" .. CHAR_CLASSES.VARIABLE .. "+)" -- variable name + .. CHAR_CLASSES.SPACE + .. "%(([^%)]*)%)" -- readable name + .. CHAR_CLASSES.SPACE + .. "(" .. CHAR_CLASSES.VARIABLE .. "+)" -- type + .. CHAR_CLASSES.SPACE .. "?" + .. ")") + + if not first_part then + return "Invalid line" + end + + if name:match("secure%.[.]*") and not allow_secure then + return "Tried to add \"secure.\" setting" + end + + if readable_name == "" then + readable_name = nil + end + local remaining_line = line:sub(first_part:len() + 1) + + if setting_type == "int" then + local default, min, max = remaining_line:match("^" + -- first int is required, the last 2 are optional + .. "(" .. CHAR_CLASSES.INTEGER .. "+)" .. CHAR_CLASSES.SPACE .. "?" + .. "(" .. CHAR_CLASSES.INTEGER .. "*)" .. CHAR_CLASSES.SPACE .. "?" + .. "(" .. CHAR_CLASSES.INTEGER .. "*)" + .. "$") + + if not default or not tonumber(default) then + return "Invalid integer setting" + end + + min = tonumber(min) + max = tonumber(max) + table.insert(settings, { + name = name, + readable_name = readable_name, + type = "int", + default = default, + min = min, + max = max, + comment = current_comment, + }) + return + end + + if setting_type == "string" or setting_type == "noise_params" + or setting_type == "key" then + local default = remaining_line:match("^(.*)$") + + if not default then + return "Invalid string setting" + end + if setting_type == "key" and not read_all then + -- ignore key type if read_all is false + return + end + + table.insert(settings, { + name = name, + readable_name = readable_name, + type = setting_type, + default = default, + comment = current_comment, + }) + return + end + + if setting_type == "bool" then + if remaining_line ~= "false" and remaining_line ~= "true" then + return "Invalid boolean setting" + end + + table.insert(settings, { + name = name, + readable_name = readable_name, + type = "bool", + default = remaining_line, + comment = current_comment, + }) + return + end + + if setting_type == "float" then + local default, min, max = remaining_line:match("^" + -- first float is required, the last 2 are optional + .. "(" .. CHAR_CLASSES.FLOAT .. "+)" .. CHAR_CLASSES.SPACE .. "?" + .. "(" .. CHAR_CLASSES.FLOAT .. "*)" .. CHAR_CLASSES.SPACE .. "?" + .. "(" .. CHAR_CLASSES.FLOAT .. "*)" + .."$") + + if not default or not tonumber(default) then + return "Invalid float setting" + end + + min = tonumber(min) + max = tonumber(max) + table.insert(settings, { + name = name, + readable_name = readable_name, + type = "float", + default = default, + min = min, + max = max, + comment = current_comment, + }) + return + end + + if setting_type == "enum" then + local default, values = remaining_line:match("^(.+)" .. CHAR_CLASSES.SPACE .. "(.+)$") + + if not default or values == "" then + return "Invalid enum setting" + end + + table.insert(settings, { + name = name, + readable_name = readable_name, + type = "enum", + default = default, + values = values:split(",", true), + comment = current_comment, + }) + return + end + + if setting_type == "path" then + local default = remaining_line:match("^(.*)$") + + if not default then + return "Invalid path setting" + end + + table.insert(settings, { + name = name, + readable_name = readable_name, + type = "path", + default = default, + comment = current_comment, + }) + return + end + + if setting_type == "flags" then + local default, possible = remaining_line:match("^" + .. "(" .. CHAR_CLASSES.FLAGS .. "+)" .. CHAR_CLASSES.SPACE .. "" + .. "(" .. CHAR_CLASSES.FLAGS .. "+)" + .. "$") + + if not default or not possible then + return "Invalid flags setting" + end + + table.insert(settings, { + name = name, + readable_name = readable_name, + type = "flags", + default = default, + possible = possible, + comment = current_comment, + }) + return + end + + return "Invalid setting type \"" .. setting_type .. "\"" +end + +local function parse_single_file(file, filepath, read_all, result, base_level, allow_secure) + -- store this helper variable in the table so it's easier to pass to parse_setting_line() + result.current_comment = "" + + local line = file:read("*line") + while line do + local error_msg = parse_setting_line(result, line, read_all, base_level, allow_secure) + if error_msg then + core.log("error", error_msg .. " in " .. filepath .. " \"" .. line .. "\"") + end + line = file:read("*line") + end + + result.current_comment = nil +end + +-- read_all: whether to ignore certain setting types for GUI or not +-- parse_mods: whether to parse settingtypes.txt in mods and games +local function parse_config_file(read_all, parse_mods) + local builtin_path = core.get_builtin_path() .. DIR_DELIM .. FILENAME + local file = io.open(builtin_path, "r") + local settings = {} + if not file then + core.log("error", "Can't load " .. FILENAME) + return settings + end + + parse_single_file(file, builtin_path, read_all, settings, 0, true) + + file:close() + + if parse_mods then + -- Parse games + local games_category_initialized = false + local index = 1 + local game = gamemgr.get_game(index) + while game do + local path = game.path .. DIR_DELIM .. FILENAME + local file = io.open(path, "r") + if file then + if not games_category_initialized then + local translation = fgettext_ne("Games"), -- not used, but needed for xgettext + table.insert(settings, { + name = "Games", + level = 0, + type = "category", + }) + games_category_initialized = true + end + + table.insert(settings, { + name = game.name, + level = 1, + type = "category", + }) + + parse_single_file(file, path, read_all, settings, 2, false) + + file:close() + end + + index = index + 1 + game = gamemgr.get_game(index) + end + + -- Parse mods + local mods_category_initialized = false + local mods = {} + get_mods(core.get_modpath(), mods) + for _, mod in ipairs(mods) do + local path = mod.path .. DIR_DELIM .. FILENAME + local file = io.open(path, "r") + if file then + if not mods_category_initialized then + local translation = fgettext_ne("Mods"), -- not used, but needed for xgettext + table.insert(settings, { + name = "Mods", + level = 0, + type = "category", + }) + mods_category_initialized = true + end + + table.insert(settings, { + name = mod.name, + level = 1, + type = "category", + }) + + parse_single_file(file, path, read_all, settings, 2, false) + + file:close() + end + end + end + + return settings +end + +local settings = parse_config_file(false, true) +local selected_setting = 1 + +local function get_current_value(setting) + local value = core.setting_get(setting.name) + if value == nil then + value = setting.default + end + return value +end + +local function create_change_setting_formspec(dialogdata) + local setting = settings[selected_setting] + local formspec = "size[10,5.2,true]" .. + "button[5,4.5;2,1;btn_done;" .. fgettext("Save") .. "]" .. + "button[3,4.5;2,1;btn_cancel;" .. fgettext("Cancel") .. "]" .. + "tablecolumns[color;text]" .. + "tableoptions[background=#00000000;highlight=#00000000;border=false]" .. + "table[0,0;10,3;info;" + + if setting.readable_name then + formspec = formspec .. "#FFFF00," .. fgettext(setting.readable_name) + .. " (" .. core.formspec_escape(setting.name) .. ")," + else + formspec = formspec .. "#FFFF00," .. core.formspec_escape(setting.name) .. "," + end + + formspec = formspec .. ",," + + local comment_text = "" + + if setting.comment == "" then + comment_text = fgettext_ne("(No description of setting given)") + else + comment_text = fgettext_ne(setting.comment) + end + for _, comment_line in ipairs(comment_text:split("\n", true)) do + formspec = formspec .. "," .. core.formspec_escape(comment_line) .. "," + end + + if setting.type == "flags" then + formspec = formspec .. ",," + .. "," .. fgettext("Please enter a comma seperated list of flags.") .. "," + .. "," .. fgettext("Possible values are: ") + .. core.formspec_escape(setting.possible:gsub(",", ", ")) .. "," + elseif setting.type == "noise_params" then + formspec = formspec .. ",," + .. "," .. fgettext("Format: , , (, , ), , , ") .. "," + .. "," .. fgettext("Optionally the lacunarity can be appended with a leading comma.") .. "," + end + + formspec = formspec:sub(1, -2) -- remove trailing comma + + formspec = formspec .. ";1]" + + if setting.type == "bool" then + local selected_index + if core.is_yes(get_current_value(setting)) then + selected_index = 2 + else + selected_index = 1 + end + formspec = formspec .. "dropdown[0.5,3.5;3,1;dd_setting_value;" + .. fgettext("Disabled") .. "," .. fgettext("Enabled") .. ";" + .. selected_index .. "]" + + elseif setting.type == "enum" then + local selected_index = 0 + formspec = formspec .. "dropdown[0.5,3.5;3,1;dd_setting_value;" + for index, value in ipairs(setting.values) do + -- translating value is not possible, since it's the value + -- that we set the setting to + formspec = formspec .. core.formspec_escape(value) .. "," + if get_current_value(setting) == value then + selected_index = index + end + end + if #setting.values > 0 then + formspec = formspec:sub(1, -2) -- remove trailing comma + end + formspec = formspec .. ";" .. selected_index .. "]" + + elseif setting.type == "path" then + local current_value = dialogdata.selected_path + if not current_value then + current_value = get_current_value(setting) + end + formspec = formspec .. "field[0.5,4;7.5,1;te_setting_value;;" + .. core.formspec_escape(current_value) .. "]" + .. "button[8,3.75;2,1;btn_browser_path;" .. fgettext("Browse") .. "]" + + else + -- TODO: fancy input for float, int, flags, noise_params + local width = 10 + local text = get_current_value(setting) + if dialogdata.error_message then + formspec = formspec .. "tablecolumns[color;text]" .. + "tableoptions[background=#00000000;highlight=#00000000;border=false]" .. + "table[5,4;5,1;error_message;#FF0000," + .. core.formspec_escape(dialogdata.error_message) .. ";0]" + width = 5 + if dialogdata.entered_text then + text = dialogdata.entered_text + end + end + formspec = formspec .. "field[0.5,4;" .. width .. ",1;te_setting_value;;" + .. core.formspec_escape(text) .. "]" + end + return formspec +end + +local function handle_change_setting_buttons(this, fields) + if fields["btn_done"] or fields["key_enter"] then + local setting = settings[selected_setting] + if setting.type == "bool" then + local new_value = fields["dd_setting_value"] + -- Note: new_value is the actual (translated) value shown in the dropdown + core.setting_setbool(setting.name, new_value == fgettext("Enabled")) + + elseif setting.type == "enum" then + local new_value = fields["dd_setting_value"] + core.setting_set(setting.name, new_value) + + elseif setting.type == "int" then + local new_value = tonumber(fields["te_setting_value"]) + if not new_value or math.floor(new_value) ~= new_value then + this.data.error_message = fgettext_ne("Please enter a valid integer.") + this.data.entered_text = fields["te_setting_value"] + core.update_formspec(this:get_formspec()) + return true + end + if setting.min and new_value < setting.min then + this.data.error_message = fgettext_ne("The value must be greater than $1.", setting.min) + this.data.entered_text = fields["te_setting_value"] + core.update_formspec(this:get_formspec()) + return true + end + if setting.max and new_value > setting.max then + this.data.error_message = fgettext_ne("The value must be lower than $1.", setting.max) + this.data.entered_text = fields["te_setting_value"] + core.update_formspec(this:get_formspec()) + return true + end + core.setting_set(setting.name, new_value) + + elseif setting.type == "float" then + local new_value = tonumber(fields["te_setting_value"]) + if not new_value then + this.data.error_message = fgettext_ne("Please enter a valid number.") + this.data.entered_text = fields["te_setting_value"] + core.update_formspec(this:get_formspec()) + return true + end + core.setting_set(setting.name, new_value) + + elseif setting.type == "flags" then + local new_value = fields["te_setting_value"] + for _,value in ipairs(new_value:split(",", true)) do + value = value:trim() + if not value:match(CHAR_CLASSES.FLAGS .. "+") + or not setting.possible:match("[,]?" .. value .. "[,]?") then + this.data.error_message = fgettext_ne("\"$1\" is not a valid flag.", value) + this.data.entered_text = fields["te_setting_value"] + core.update_formspec(this:get_formspec()) + return true + end + end + core.setting_set(setting.name, new_value) + + else + local new_value = fields["te_setting_value"] + core.setting_set(setting.name, new_value) + end + core.setting_save() + this:delete() + return true + end + + if fields["btn_cancel"] then + this:delete() + return true + end + + if fields["btn_browser_path"] then + core.show_file_open_dialog("dlg_browse_path", fgettext_ne("Select path")) + end + + if fields["dlg_browse_path_accepted"] then + this.data.selected_path = fields["dlg_browse_path_accepted"] + core.update_formspec(this:get_formspec()) + end + + return false +end + +local function create_settings_formspec(tabview, name, tabdata) + local formspec = "tablecolumns[color;tree;text;text]" .. + "tableoptions[background=#00000000;border=false]" .. + "table[0,0;12,4.5;list_settings;" + + local current_level = 0 + for _, entry in ipairs(settings) do + local name + if not core.setting_getbool("main_menu_technical_settings") and entry.readable_name then + name = fgettext_ne(entry.readable_name) + else + name = entry.name + end + + if entry.type == "category" then + current_level = entry.level + formspec = formspec .. "#FFFF00," .. current_level .. "," .. fgettext(name) .. ",," + + elseif entry.type == "bool" then + local value = get_current_value(entry) + if core.is_yes(value) then + value = fgettext("Enabled") + else + value = fgettext("Disabled") + end + formspec = formspec .. "," .. (current_level + 1) .. "," .. core.formspec_escape(name) .. "," + .. value .. "," + + elseif entry.type == "key" then + -- ignore key settings, since we have a special dialog for them + + else + formspec = formspec .. "," .. (current_level + 1) .. "," .. core.formspec_escape(name) .. "," + .. core.formspec_escape(get_current_value(entry)) .. "," + end + end + + if #settings > 0 then + formspec = formspec:sub(1, -2) -- remove trailing comma + end + formspec = formspec .. ";" .. selected_setting .. "]" .. + "button[4,4.5;3,1;btn_change_keys;".. fgettext("Change keys") .. "]" .. + "button[10,4.5;2,1;btn_edit;" .. fgettext("Edit") .. "]" .. + "button[7,4.5;3,1;btn_restore;" .. fgettext("Restore Default") .. "]" .. + "checkbox[0,4.5;cb_tech_settings;" .. fgettext("Show technical names") .. ";" + .. dump(core.setting_getbool("main_menu_technical_settings")) .. "]" + + return formspec +end + +local function handle_settings_buttons(this, fields, tabname, tabdata) + local list_enter = false + if fields["list_settings"] then + selected_setting = core.get_table_index("list_settings") + if core.explode_table_event(fields["list_settings"]).type == "DCL" then + -- Directly toggle booleans + local setting = settings[selected_setting] + if setting.type == "bool" then + local current_value = get_current_value(setting) + core.setting_setbool(setting.name, not core.is_yes(current_value)) + core.setting_save() + return true + else + list_enter = true + end + else + return true + end + end + + if fields["btn_edit"] or list_enter then + local setting = settings[selected_setting] + if setting.type ~= "category" then + local edit_dialog = dialog_create("change_setting", create_change_setting_formspec, + handle_change_setting_buttons) + edit_dialog:set_parent(this) + this:hide() + edit_dialog:show() end return true end - if fields["cb_connected_glass"] then - core.setting_set("connected_glass", fields["cb_connected_glass"]) + + if fields["btn_restore"] then + local setting = settings[selected_setting] + if setting.type ~= "category" then + core.setting_set(setting.name, setting.default) + core.setting_save() + core.update_formspec(this:get_formspec()) + end return true end - if fields["cb_node_highlighting"] then - core.setting_set("enable_node_highlighting", fields["cb_node_highlighting"]) - return true - end - if fields["cb_particles"] then - core.setting_set("enable_particles", fields["cb_particles"]) - return true - end - if fields["cb_bumpmapping"] then - core.setting_set("enable_bumpmapping", fields["cb_bumpmapping"]) - end - if fields["cb_generate_normalmaps"] then - core.setting_set("generate_normalmaps", fields["cb_generate_normalmaps"]) - end - if fields["cb_parallax"] then - core.setting_set("enable_parallax_occlusion", fields["cb_parallax"]) - return true - end - if fields["cb_waving_water"] then - core.setting_set("enable_waving_water", fields["cb_waving_water"]) - return true - end - if fields["cb_waving_leaves"] then - core.setting_set("enable_waving_leaves", fields["cb_waving_leaves"]) - end - if fields["cb_waving_plants"] then - core.setting_set("enable_waving_plants", fields["cb_waving_plants"]) - return true - end - if fields["btn_change_keys"] ~= nil then + + if fields["btn_change_keys"] then core.show_keys_menu() return true end - if fields["sb_gui_scaling"] then - local event = core.explode_scrollbar_event(fields["sb_gui_scaling"]) - - if event.type == "CHG" then - local tosave = string.format("%.2f",scrollbar_to_gui_scale(event.value)) - core.setting_set("gui_scaling",tosave) - return true - end - end - if fields["cb_touchscreen_target"] then - core.setting_set("touchtarget", fields["cb_touchscreen_target"]) - return true - end - if fields["btn_reset_singleplayer"] then - showconfirm_reset(this) + if fields["cb_tech_settings"] then + core.setting_set("main_menu_technical_settings", fields["cb_tech_settings"]) + core.setting_save() + core.update_formspec(this:get_formspec()) return true end - --Note dropdowns have to be handled LAST! - local ddhandled = false - - if fields["dd_touchthreshold"] then - core.setting_set("touchscreen_threshold",fields["dd_touchthreshold"]) - ddhandled = true - end - - if fields["dd_video_driver"] then - core.setting_set("video_driver", - video_driver_fname_to_name(fields["dd_video_driver"])) - ddhandled = true - end - if fields["dd_filters"] == dd_filter_labels[1] then - core.setting_set("bilinear_filter", "false") - core.setting_set("trilinear_filter", "false") - ddhandled = true - end - if fields["dd_filters"] == dd_filter_labels[2] then - core.setting_set("bilinear_filter", "true") - core.setting_set("trilinear_filter", "false") - ddhandled = true - end - if fields["dd_filters"] == dd_filter_labels[3] then - core.setting_set("bilinear_filter", "false") - core.setting_set("trilinear_filter", "true") - ddhandled = true - end - if fields["dd_mipmap"] == dd_mipmap_labels[1] then - core.setting_set("mip_map", "false") - core.setting_set("anisotropic_filter", "false") - ddhandled = true - end - if fields["dd_mipmap"] == dd_mipmap_labels[2] then - core.setting_set("mip_map", "true") - core.setting_set("anisotropic_filter", "false") - ddhandled = true - end - if fields["dd_mipmap"] == dd_mipmap_labels[3] then - core.setting_set("mip_map", "true") - core.setting_set("anisotropic_filter", "true") - ddhandled = true - end - - return ddhandled + return false end tab_settings = { name = "settings", caption = fgettext("Settings"), - cbf_formspec = formspec, - cbf_button_handler = handle_settings_buttons + cbf_formspec = create_settings_formspec, + cbf_button_handler = handle_settings_buttons, } + +local function create_minetest_conf_example() + local result = "# This file contains a list of all available settings and their default value for minetest.conf\n" .. + "\n" .. + "# By default, all the settings are commented and not functional.\n" .. + "# Uncomment settings by removing the preceding #.\n" .. + "\n" .. + "# minetest.conf is read by default from:\n" .. + "# ../minetest.conf\n" .. + "# ../../minetest.conf\n" .. + "# Any other path can be chosen by passing the path as a parameter\n" .. + "# to the program, eg. \"minetest.exe --config ../minetest.conf.example\".\n" .. + "\n" .. + "# Further documentation:\n" .. + "# http://wiki.minetest.net/\n" .. + "\n" + + local settings = parse_config_file(true, false) + for _, entry in ipairs(settings) do + if entry.type == "category" then + if entry.level == 0 then + result = result .. "#\n# " .. entry.name .. "\n#\n\n" + else + for i = 1, entry.level do + result = result .. "#" + end + result = result .. "# " .. entry.name .. "\n\n" + end + else + if entry.comment ~= "" then + for _, comment_line in ipairs(entry.comment:split("\n", true)) do + result = result .."# " .. comment_line .. "\n" + end + end + result = result .. "# type: " .. entry.type + if entry.min then + result = result .. " min: " .. entry.min + end + if entry.max then + result = result .. " max: " .. entry.max + end + if entry.values then + result = result .. " values: " .. table.concat(entry.values, ", ") + end + if entry.possible then + result = result .. " possible values: " .. entry.possible:gsub(",", ", ") + end + result = result .. "\n" + result = result .. "# " .. entry.name .. " = ".. entry.default .. "\n\n" + end + end + return result +end + +local function create_translation_file() + local result = "// This file is automatically generated\n" .. + "// It conatins a bunch of fake gettext calls, to tell xgettext about the strings in config files\n" .. + "// To update it, refer to the bottom of builtin/mainmenu/tab_settings.lua\n\n" .. + "fake_function() {\n" + + local settings = parse_config_file(true, false) + for _, entry in ipairs(settings) do + if entry.type == "category" then + local name_escaped = entry.name:gsub("\"", "\\\"") + result = result .. "\tgettext(\"" .. name_escaped .. "\");\n" + else + if entry.readable_name then + local readable_name_escaped = entry.readable_name:gsub("\"", "\\\"") + result = result .. "\tgettext(\"" .. readable_name_escaped .. "\");\n" + end + if entry.comment ~= "" then + local comment_escaped = entry.comment:gsub("\n", "\\n") + comment_escaped = comment_escaped:gsub("\"", "\\\"") + result = result .. "\tgettext(\"" .. comment_escaped .. "\");\n" + end + end + end + result = result .. "}\n" + return result +end + +if false then + local file = io.open("minetest.conf.example", "w") + if file then + file:write(create_minetest_conf_example()) + file:close() + end +end + +if false then + local file = io.open("src/settings_translation_file.cpp", "w") + if file then + file:write(create_translation_file()) + file:close() + end +end diff --git a/builtin/mainmenu/tab_simple_main.lua b/builtin/mainmenu/tab_simple_main.lua index 434113b5..f6a41bc0 100644 --- a/builtin/mainmenu/tab_simple_main.lua +++ b/builtin/mainmenu/tab_simple_main.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, diff --git a/builtin/mainmenu/tab_singleplayer.lua b/builtin/mainmenu/tab_singleplayer.lua index c2b850e4..88295f3a 100644 --- a/builtin/mainmenu/tab_singleplayer.lua +++ b/builtin/mainmenu/tab_singleplayer.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, @@ -23,9 +23,9 @@ local function current_game() end local function singleplayer_refresh_gamebar() - + local old_bar = ui.find_by_name("game_button_bar") - + if old_bar ~= nil then old_bar:delete() end @@ -38,6 +38,17 @@ local function singleplayer_refresh_gamebar() core.set_topleft_text(gamemgr.games[j].name) core.setting_set("menu_last_game",gamemgr.games[j].id) menudata.worldlist:set_filtercriteria(gamemgr.games[j].id) + local index = filterlist.get_current_index(menudata.worldlist, + tonumber(core.setting_get("mainmenu_last_selected_world"))) + if not index or index < 1 then + local selected = core.get_textlist_index("sp_worlds") + if selected ~= nil and selected < #menudata.worldlist:get_list() then + index = selected + else + index = #menudata.worldlist:get_list() + end + end + menu_worldmt_legacy(index) return true end end @@ -76,7 +87,7 @@ end local function get_formspec(tabview, name, tabdata) local retval = "" - + local index = filterlist.get_current_index(menudata.worldlist, tonumber(core.setting_get("mainmenu_last_selected_world")) ) @@ -105,32 +116,9 @@ local function main_button_handler(this, fields, name, tabdata) if fields["sp_worlds"] ~= nil then local event = core.explode_textlist_event(fields["sp_worlds"]) - local selected = core.get_textlist_index("sp_worlds") - if selected ~= nil then - local filename = menudata.worldlist:get_list()[selected].path - local worldconfig = modmgr.get_worldconfig(filename) - filename = filename .. DIR_DELIM .. "world.mt" - if worldconfig.creative_mode ~= nil then - core.setting_set("creative_mode", worldconfig.creative_mode) - else - local worldfile = Settings(filename) - worldfile:set("creative_mode", core.setting_get("creative_mode")) - if not worldfile:write() then - core.log("error", "Failed to write world config file") - end - end - if worldconfig.enable_damage ~= nil then - core.setting_set("enable_damage", worldconfig.enable_damage) - else - local worldfile = Settings(filename) - worldfile:set("enable_damage", core.setting_get("enable_damage")) - if not worldfile:write() then - core.log("error", "Failed to write world config file") - end - end - end + menu_worldmt_legacy(selected) if event.type == "DCL" then world_doubleclick = true @@ -150,28 +138,16 @@ local function main_button_handler(this, fields, name, tabdata) if fields["cb_creative_mode"] then core.setting_set("creative_mode", fields["cb_creative_mode"]) local selected = core.get_textlist_index("sp_worlds") - local filename = menudata.worldlist:get_list()[selected].path .. - DIR_DELIM .. "world.mt" + menu_worldmt(selected, "creative_mode", fields["cb_creative_mode"]) - local worldfile = Settings(filename) - worldfile:set("creative_mode", fields["cb_creative_mode"]) - if not worldfile:write() then - core.log("error", "Failed to write world config file") - end return true end if fields["cb_enable_damage"] then core.setting_set("enable_damage", fields["cb_enable_damage"]) local selected = core.get_textlist_index("sp_worlds") - local filename = menudata.worldlist:get_list()[selected].path .. - DIR_DELIM .. "world.mt" + menu_worldmt(selected, "enable_damage", fields["cb_enable_damage"]) - local worldfile = Settings(filename) - worldfile:set("enable_damage", fields["cb_enable_damage"]) - if not worldfile:write() then - core.log("error", "Failed to write world config file") - end return true end @@ -179,12 +155,14 @@ local function main_button_handler(this, fields, name, tabdata) world_doubleclick or fields["key_enter"] then local selected = core.get_textlist_index("sp_worlds") + gamedata.selected_world = menudata.worldlist:get_raw_index(selected) - if selected ~= nil then - gamedata.selected_world = menudata.worldlist:get_raw_index(selected) - gamedata.singleplayer = true - + if selected ~= nil and gamedata.selected_world ~= 0 then + gamedata.singleplayer = true core.start() + else + gamedata.errormessage = + fgettext("No world created or selected!") end return true end diff --git a/builtin/mainmenu/tab_texturepacks.lua b/builtin/mainmenu/tab_texturepacks.lua index 9417b94e..9cab9e15 100644 --- a/builtin/mainmenu/tab_texturepacks.lua +++ b/builtin/mainmenu/tab_texturepacks.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, @@ -17,7 +17,7 @@ -------------------------------------------------------------------------------- local function filter_texture_pack_list(list) - local retval = {"None"} + local retval = {fgettext("None")} for _, item in ipairs(list) do if item ~= "base" then table.insert(retval, item) @@ -45,7 +45,7 @@ end -------------------------------------------------------------------------------- local function get_formspec(tabview, name, tabdata) - + local retval = "label[4,-0.25;".. fgettext("Select texture pack:") .. "]".. "textlist[4,0.25;7.5,5.0;TPs;" @@ -62,10 +62,18 @@ local function get_formspec(tabview, name, tabdata) return retval end - local infofile = current_texture_path ..DIR_DELIM.."info.txt" + local infofile = current_texture_path ..DIR_DELIM.."description.txt" + -- This adds backwards compatibility for old texture pack description files named + -- "info.txt", and should be removed once all such texture packs have been updated + if not file_exists(infofile) then + infofile = current_texture_path ..DIR_DELIM.."info.txt" + if file_exists(infofile) then + core.log("info.txt is depreciated. description.txt should be used instead."); + end + end local infotext = "" local f = io.open(infofile, "r") - if f==nil then + if not f then infotext = fgettext("No information available") else infotext = f:read("*all") @@ -98,7 +106,7 @@ local function main_button_handler(tabview, fields, name, tabdata) local current_index = core.get_textlist_index("TPs") if current_index ~= nil and #list >= current_index then local new_path = core.get_texturepath()..DIR_DELIM..list[current_index] - if list[current_index] == "None" then new_path = "" end + if list[current_index] == fgettext("None") then new_path = "" end core.setting_set("texture_path", new_path) end diff --git a/builtin/mainmenu/textures.lua b/builtin/mainmenu/textures.lua index 56992c0c..cffc5d0a 100644 --- a/builtin/mainmenu/textures.lua +++ b/builtin/mainmenu/textures.lua @@ -3,7 +3,7 @@ -- --This program is free software; you can redistribute it and/or modify --it under the terms of the GNU Lesser General Public License as published by ---the Free Software Foundation; either version 2.1 of the License, or +--the Free Software Foundation; either version 3.0 of the License, or --(at your option) any later version. -- --This program is distributed in the hope that it will be useful, @@ -129,7 +129,7 @@ function mm_texture.set_generic(identifier) end -------------------------------------------------------------------------------- -function mm_texture.set_game(identifier,gamedetails) +function mm_texture.set_game(identifier, gamedetails) if gamedetails == nil then return false @@ -137,15 +137,34 @@ function mm_texture.set_game(identifier,gamedetails) if mm_texture.texturepack ~= nil then local path = mm_texture.texturepack .. DIR_DELIM .. - gamedetails.id .. "_menu_" .. identifier .. ".png" - if core.set_background(identifier,path) then + gamedetails.id .. "_menu_" .. identifier .. ".png" + if core.set_background(identifier, path) then return true end end - local path = gamedetails.path .. DIR_DELIM .."menu" .. - DIR_DELIM .. identifier .. ".png" - if core.set_background(identifier,path) then + -- Find out how many randomized textures the subgame provides + local n = 0 + local filename + local menu_files = core.get_dir_list(gamedetails.path .. DIR_DELIM .. "menu", false) + for i = 1, #menu_files do + filename = identifier .. "." .. i .. ".png" + if table.indexof(menu_files, filename) == -1 then + n = i - 1 + break + end + end + -- Select random texture, 0 means standard texture + n = math.random(0, n) + if n == 0 then + filename = identifier .. ".png" + else + filename = identifier .. "." .. n .. ".png" + end + + local path = gamedetails.path .. DIR_DELIM .. "menu" .. + DIR_DELIM .. filename + if core.set_background(identifier, path) then return true end diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt new file mode 100644 index 00000000..6fbc8f24 --- /dev/null +++ b/builtin/settingtypes.txt @@ -0,0 +1,993 @@ +# This file contains all settings displayed in the settings menu. +# +# General format: +# name (Readable name) type type_args +# +# Note that the parts are seperated by exactly one space +# +# `type` can be: +# - int +# - string +# - bool +# - float +# - enum +# - path +# - key (will be ignored in GUI, since a special key change dialog exists) +# - flags +# - noise_params +# +# `type_args` can be: +# * int: +# - default +# - default min max +# * string: +# - default (if default is not specified then "" is set) +# * bool: +# - default +# * float: +# - default +# - default min max +# * enum: +# - default value1,value2,... +# * path: +# - default (if default is not specified then "" is set) +# * key: +# - default +# * flags: +# Flags are always separated by comma without spaces. +# - default possible_flags +# * noise_params: +# TODO: these are currently treated like strings +# +# Comments directly above a setting are bound to this setting. +# All other comments are ignored. +# +# Comments and (Readable name) are handled by gettext. +# Comments should be complete sentences that describe the setting and possibly +# give the user additional useful insight. +# Sections are marked by a single line in the format: [Section Name] +# Sub-section are marked by adding * in front of the section name: [*Sub-section] +# Sub-sub-sections have two * etc. +# There shouldn't be too much settings per category; settings that shouldn't be +# modified by the "average user" should be in (sub-)categories called "Advanced". + +[Client] + +[*Controls] +# If enabled, you can place blocks at the position (feet + eye level) where you stand. +# This is helpful when working with nodeboxes in small areas. +enable_build_where_you_stand (Build inside player) bool false + +# Player is able to fly without being affected by gravity. +# This requires the "fly" privilege on the server. +free_move (Flying) bool false + +# Fast movement (via use key). +# This requires the "fast" privilege on the server. +fast_move (Fast movement) bool false + +# If enabled together with fly mode, player is able to fly through solid nodes. +# This requires the "noclip" privilege on the server. +noclip (Noclip) bool false + +# Smooths camera when moving and looking around. +# Useful for recording videos. +cinematic (Cinematic mode) bool false + +# Smooths rotation of camera. 0 to disable. +camera_smoothing (Camera smoothing) float 0.0 0.0 0.99 + +# Smooths rotation of camera in cinematic mode. 0 to disable. +cinematic_camera_smoothing (Camera smoothing in cinematic mode) float 0.7 0.0 0.99 + +# Invert vertical mouse movement. +invert_mouse (Invert mouse) bool false + +# Mouse sensitivity multiplier. +mouse_sensitivity (Mouse sensitivity) float 0.2 + +# If enabled, "use" key instead of "sneak" key is used for climbing down and descending. +aux1_descends (Key use for climbing/descending) bool false + +# Double-tapping the jump key toggles fly mode. +doubletap_jump (Double tap jump for fly) bool false + +# If disabled "use" key is used to fly fast if both fly and fast mode are enabled. +always_fly_fast (Always fly and fast) bool true + +# The time in seconds it takes between repeated right clicks when holding the right mouse button. +repeat_rightclick_time (Rightclick repetition interval) float 0.25 + +# Enable random user input (only used for testing). +random_input (Random input) bool false + +# Continuous forward movement (only used for testing). +continuous_forward (Continuous forward) bool false + +# Key for moving the player forward. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_forward (Forward key) key KEY_KEY_W + +# Key for moving the player backward. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_backward (Backward key) key KEY_KEY_S + +# Key for moving the player left. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_left (Left key) key KEY_KEY_A + +# Key for moving the player right. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_right (Right key) key KEY_KEY_D + +# Key for jumping. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_jump (Jump key) key KEY_SPACE + +# Key for sneaking. +# Also used for climbing down and descending in water if aux1_descends is disabled. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_sneak (Sneak key) key KEY_LSHIFT + +# Key for opening the inventory. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_inventory (Inventory key) key KEY_KEY_I + +# Key for moving fast in fast mode. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_special1 (Use key) key KEY_KEY_E + +# Key for opening the chat window. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_chat (Chat key) key KEY_KEY_T + +# Key for opening the chat window to type commands. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_cmd (Command key) key / + +# Key for opening the chat console. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keyman_console (Console key) key KEY_F10 + +# Key for toggling unlimited view range. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_rangeselect (Range select key) key KEY_KEY_R + +# Key for toggling flying. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_freemove (Fly key) key KEY_KEY_K + +# Key for toggling fast mode. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_fastmove (Fast key) key KEY_KEY_J + +# Key for toggling noclip mode. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_noclip (Noclip key) key KEY_KEY_H + +# Key for toggling cinematic mode. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_cinematic (Cinematic mode key) key KEY_F8 + +# Key for toggling display of minimap. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_minimap (Minimap key) key KEY_F9 + +# Key for taking screenshots. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_screenshot (Screenshot) key KEY_F12 + +# Key for dropping the currently selected item. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_drop (Drop item key) key KEY_KEY_Q + +# Key for toggling the display of the HUD. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_toggle_hud (HUD toggle key) key KEY_F1 + +# Key for toggling the display of the chat. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_toggle_chat (Chat toggle key) key KEY_F2 + +# Key for toggling the display of the fog. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_toggle_force_fog_off (Fog toggle key) key KEY_F3 + +# Key for toggling the camrea update. Only used for development +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_toggle_update_camera (Camera update toggle key) key + +# Key for toggling the display of debug info. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_toggle_debug (Debug info toggle key) key KEY_F5 + +# Key for toggling the display of the profiler. Used for development. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_toggle_profiler (Profiler toggle key) key KEY_F6 + +# Key for switching between first- and third-person camera. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_camera_mode (Toggle camera mode key) key KEY_F7 + +# Key for increasing the viewing range. Modifies the minimum viewing range. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_increase_viewing_range_min (View range increase key) key + + +# Key for decreasing the viewing range. Modifies the minimum viewing range. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_decrease_viewing_range_min (View range decrease key) key - + +# Key for printing debug stacks. Used for development. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +keymap_print_debug_stacks (Print stacks) key KEY_KEY_P + +[*Network] + +# Address to connect to. +# Leave this blank to start a local server. +# Note that the address field in the main menu overrides this setting. +address (Server address) string + +# Port to connect to (UDP). +# Note that the port field in the main menu overrides this setting. +remote_port (Remote port) int 30000 1 65535 + +# Save the map received by the client on disk. +enable_local_map_saving (Saving map received from server) bool false + +# Enable usage of remote media server (if provided by server). +# Remote servers offer a significantly faster way to download media (e.g. textures) +# when connecting to the server. +enable_remote_media_server (Connect to external media server) bool true + +# URL to the server list displayed in the Multiplayer Tab. +serverlist_url (Serverlist URL) string servers.minetest.net + +# File in client/serverlist/ that contains your favorite servers displayed in the Multiplayer Tab. +serverlist_file (Serverlist file) string favoriteservers.txt + +[*Graphics] + +[**In-Game] + +[***Basic] + +# Whether to fog out the end of the visible area. +enable_fog (Fog) bool true + +# Enable a bit lower water surface, so it doesn't "fill" the node completely. +# Note that this is not quite optimized and that smooth lighting on the +# water surface doesn't work with this. +new_style_water (New style water) bool false + +# Leaves style: +# - Fancy: all faces visible +# - Simple: only outer faces, if defined special_tiles are used +# - Opaque: disable transparency +leaves_style (Leaves style) enum fancy fancy,simple,opaque + +# Connects glass if supported by node. +connected_glass (Connect glass) bool false + +# Enable smooth lighting with simple ambient occlusion. +# Disable for speed or for different looks. +smooth_lighting (Smooth lighting) bool true + +# Clouds are a client side effect. +enable_clouds (Clouds) bool true + +# Use 3D cloud look instead of flat. +enable_3d_clouds (3D clouds) bool true + +[***Filtering] + +# Use mip mapping to scale textures. May slightly increase performance. +mip_map (Mipmapping) bool false + +# Use anisotropic filtering when viewing at textures from an angle. +anisotropic_filter (Anisotropic filtering) bool false + +# Use bilinear filtering when scaling textures. +bilinear_filter (Bilinear filtering) bool false + +# Use trilinear filtering when scaling textures. +trilinear_filter (Trilinear filtering) bool false + +# Filtered textures can blend RGB values with fully-transparent neighbors, +# which PNG optimizers usually discard, sometimes resulting in a dark or +# light edge to transparent textures. Apply this filter to clean that up +# at texture load time. +texture_clean_transparent (Clean transparent textures) bool false + +# When using bilinear/trilinear/anisotropic filters, low-resolution textures +# can be blurred, so automatically upscale them with nearest-neighbor +# interpolation to preserve crisp pixels. This sets the minimum texture size +# for the upscaled textures; higher values look sharper, but require more +# memory. Powers of 2 are recommended. Setting this higher than 1 may not +# have a visible effect unless bilinear/trilinear/anisotropic filtering is +# enabled. +texture_min_size (Minimum texture size for filters) int 64 + +# Pre-generate all item visuals used in the inventory. +# This increases startup time, but runs smoother in-game. +# The generated textures can easily exceed your VRAM, causing artifacts in the inventory. +preload_item_visuals (Preload inventory textures) bool false + +# Experimental option, might cause visible spaces between blocks +# when set to higher number than 0. +fsaa (FSAA) enum 0 0,1,2,4,8,16 + +[***Shaders] + +# Shaders allow advanced visul effects and may increase performance on some video cards. +# Thy only work with the OpenGL video backend. +enable_shaders (Shaders) bool true + +[****Bumpmapping] + +# Enables bumpmapping for textures. Normalmaps need to be supplied by the texture pack +# or need to be auto-generated. +# Requires shaders to be enabled. +enable_bumpmapping (Bumpmapping) bool false + +# Enables on the fly normalmap generation (Emboss effect). +# Requires bumpmapping to be enabled. +generate_normalmaps (Generate normalmaps) bool false + +# Strength of generated normalmaps. +normalmaps_strength (Normalmaps strength) float 0.6 + +# Defines sampling step of texture. +# A higher value results in smoother normal maps. +normalmaps_smooth (Normalmaps sampling) int 0 0 2 + +[****Parallax Occlusion] + +# Enables parallax occlusion mapping. +# Requires shaders to be enabled. +enable_parallax_occlusion (Parallax occlusion) bool false + +# 0 = parallax occlusion with slope information (faster). +# 1 = relief mapping (slower, more accurate). +parallax_occlusion_mode (Parallax occlusion mode) int 1 0 1 + +# Strength of parallax. +3d_parallax_strength (Parallax occlusion strength) float 0.025 + +# Number of parallax occlusion iterations. +parallax_occlusion_iterations (Parallax occlusion iterations) int 4 + +# Overall scale of parallax occlusion effect. +parallax_occlusion_scale (Parallax occlusion Scale) float 0.08 + +# Overall bias of parallax occlusion effect, usually scale/2. +parallax_occlusion_bias (Parallax occlusion bias) float 0.04 + +[****Waving Nodes] + +# Set to true enables waving water. +# Requires shaders to be enabled. +enable_waving_water (Waving water) bool false + +water_wave_height (Waving water height) float 1.0 + +water_wave_length (Waving water length) float 20.0 + +water_wave_speed (Waving water speed) float 5.0 + +# Set to true enables waving leaves. +# Requires shaders to be enabled. +enable_waving_leaves (Waving leaves) bool false + +# Set to true enables waving plants. +# Requires shaders to be enabled. +enable_waving_plants (Waving plants) bool false + +[***Advanced] + +# Minimum wanted FPS. +# The amount of rendered stuff is dynamically set according to this. and viewing range min and max. +wanted_fps (Wanted FPS) int 30 + +# If FPS would go higher than this, limit it by sleeping +# to not waste CPU power for no benefit. +fps_max (Maximum FPS) int 60 + +# Maximum FPS when game is paused. +pause_fps_max (FPS in pause menu) int 20 + +# The allowed adjustment range for the automatic rendering range adjustment. +# Set this to be equal to viewing range minimum to disable the auto-adjustment algorithm. +viewing_range_nodes_max (Viewing range maximum) int 160 + +# The allowed adjustment range for the automatic rendering range adjustment. +# Set this to be equal to viewing range minimum to disable the auto-adjustment algorithm. +viewing_range_nodes_min (Viewing range minimum) int 35 + +# Vertical initial window size. +screenW (Screen width) int 800 + +# Horizontal initial window size. +screenH (Screen height) int 600 + +# Fullscreen mode. +fullscreen (Full screen) bool false + +# Bits per pixel (aka color depth) in fullscreen mode. +fullscreen_bpp (Full screen BPP) int 24 + +# Vertical screen synchronization. +vsync (V-Sync) bool false + +# Field of view in degrees. +fov (Field of view) int 72 30 160 + +# Adjust the gamma encoding for the light tables. Lower numbers are brighter. +# This setting is for the client only and is ignored by the server. +display_gamma (Gamma) float 1.8 1.0 3.0 + +# Path to texture directory. All textures are first searched from here. +texture_path (Texture path) path + +# The rendering back-end for Irrlicht. +video_driver (Video driver) enum opengl null,software,burningsvideo,direct3d8,direct3d9,opengl + +# Height on which clouds are appearing. +cloud_height (Cloud height) int 120 + +# Radius of cloud area stated in number of 64 node cloud squares. +# Values larger than 26 will start to produce sharp cutoffs at cloud area corners. +cloud_radius (Cloud radius) int 12 + +# Multiplier for view bobbing. +# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double. +view_bobbing_amount (View bobbing) float 1.0 + +# Multiplier for fall bobbing. +# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double. +fall_bobbing_amount (Fall bobbing) float 0.0 + +# 3D support. +# Currently supported: +# - none: no 3d output. +# - anaglyph: cyan/magenta color 3d. +# - interlaced: odd/even line based polarisation screen support. +# - topbottom: split screen top/bottom. +# - sidebyside: split screen side by side. +3d_mode (3D mode) enum none none,anaglyph,interlaced,topbottom,sidebyside + +# In-game chat console background color (R,G,B). +console_color (Console color) string (0,0,0) + +# In-game chat console background alpha (opaqueness, between 0 and 255). +console_alpha (Console alpha) int 200 0 255 + +# Selection box border color (R,G,B). +selectionbox_color (Selection box color) string (0,0,0) + +# Width of the selectionbox's lines around nodes. +selectionbox_width (Selection box width) int 2 1 5 + +# Crosshair color (R,G,B). +crosshair_color (Crosshair color) string (255,255,255) + +# Crosshair alpha (opaqueness, between 0 and 255). +crosshair_alpha (Crosshair alpha) int 255 0 255 + +# Whether node texture animations should be desynchronized per mapblock. +desynchronize_mapblock_texture_animation (Desynchronize block animation) bool true + +# Maximum proportion of current window to be used for hotbar. +# Useful if there's something to be displayed right or left of hotbar. +hud_hotbar_max_width (Maximum hotbar width) float 1.0 + +# Enable selection highlighting for nodes (disables selectionbox). +enable_node_highlighting (Node highlighting) bool false + +# Enables caching of facedir rotated meshes. +enable_mesh_cache (Mesh cache) bool false + +# Enables minimap. +enable_minimap (Minimap) bool true + +# Shape of the minimap. Enabled = round, disabled = square. +minimap_shape_round (Round minimap) bool true + +# True = 256 +# False = 128 +# Useable to make minimap smoother on slower machines. +minimap_double_scan_height (Minimap scan height) bool true + +# Make fog and sky colors depend on daytime (dawn/sunset) and view direction. +directional_colored_fog (Colored fog) bool true + +# The strength (darkness) of node ambient-occlusion shading. +# Lower is darker, Higher is lighter. The valid range of values for this +# setting is 0.25 to 4.0 inclusive. If the value is out of range it will be +# set to the nearest valid value. +ambient_occlusion_gamma (Ambient occlusion gamma) float 2.2 0.25 4.0 + +[**Menus] + +# Use a cloud animation for the main menu background. +menu_clouds (Clouds in menu) bool true + +# Scale gui by a user specified value. +# Use a nearest-neighbor-anti-alias filter to scale the GUI. +# This will smooth over some of the rough edges, and blend +# pixels when scaling down, at the cost of blurring some +# edge pixels when images are scaled by non-integer sizes. +gui_scaling (GUI scaling) float 1.0 + +# When gui_scaling_filter is true, all GUI images need to be +# filtered in software, but some images are generated directly +# to hardware (e.g. render-to-texture for nodes in inventory). +gui_scaling_filter (GUI scaling filter) bool false + +# When gui_scaling_filter_txr2img is true, copy those images +# from hardware to software for scaling. When false, fall back +# to the old scaling method, for video drivers that don't +# propery support downloading textures back from hardware. +gui_scaling_filter_txr2img (GUI scaling filter txr2img) bool true + +# Delay showing tooltips, stated in milliseconds. +tooltip_show_delay (Tooltip delay) int 400 + +# Whether freetype fonts are used, requires freetype support to be compiled in. +freetype (Freetype fonts) bool true + +# Path to TrueTypeFont or bitmap. +font_path (Font path) path fonts/liberationsans.ttf + +font_size (Font size) int 15 + +# Font shadow offset, if 0 then shadow will not be drawn. +font_shadow (Font shadow) int 1 + +# Font shadow alpha (opaqueness, between 0 and 255). +font_shadow_alpha (Font shadow alpha) int 128 0 255 + +mono_font_path (Monospace font path) path fonts/liberationmono.ttf + +mono_font_size (Monospace font size) int 15 + +# This font will be used for certain languages. +fallback_font_path (Fallback font) path fonts/DroidSansFallbackFull.ttf +fallback_font_size (Fallback font size) int 15 +fallback_font_shadow (Fallback font shadow) int 1 +fallback_font_shadow_alpha (Fallback font shadow alpha) int 128 0 255 + +# Path to save screenshots at. +screenshot_path (Screenshot folder) path + +[**Advanced] + +# Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens. +screen_dpi (DPI) int 72 + +[*Sound] + +enable_sound (Sound) bool true + +sound_volume (Volume) float 0.7 0.0 1.0 + +[*Advanced] + +# Timeout for client to remove unused map data from memory. +client_unload_unused_data_timeout (Mapblock unload timeout) int 600 + +# Maximum number of mapblocks for client to be kept in memory. +# Set to -1 for unlimited amount. +client_mapblock_limit (Mapblock limit) int 5000 + +# Whether to show the client debug info (has the same effect as hitting F5). +show_debug (Show debug info) bool false + +[Server / Singleplayer] + +# Name of the server, to be displayed when players join and in the serverlist. +server_name (Server name) string Minetest server + +# Description of server, to be displayed when players join and in the serverlist. +server_description (Server description) string mine here + +# Domain name of server, to be displayed in the serverlist. +server_address (Server address) string game.minetest.net + +# Homepage of server, to be displayed in the serverlist. +server_url (Server URL) string http://minetest.net + +# Automaticaly report to the serverlist. +server_announce (Announce server) bool false + +# Announce to this serverlist. +# If you want to announce your ipv6 address, use serverlist_url = v6.servers.minetest.net. +serverlist_url (Serverlist URL) string servers.minetest.net + +[*Network] + +# Network port to listen (UDP). +# This value will be overridden when starting from the main menu. +port (Server port) int 30000 + +# The network interface that the server listens on. +bind_address (Bind address) string + +# Enable to disallow old clients from connecting. +# Older clients are compatible in the sense that they will not crash when connecting +# to new servers, but they may not support all new features that you are expecting. +strict_protocol_version_checking (Strict protocol checking) bool false + +# Specifies URL from which client fetches media instead of using UDP. +# $filename should be accessible from $remote_media$filename via cURL +# (obviously, remote_media should end with a slash). +# Files that are not present will be fetched the usual way. +remote_media (Remote media) string + +# Enable/disable running an IPv6 server. An IPv6 server may be restricted +# to IPv6 clients, depending on system configuration. +# Ignored if bind_address is set. +ipv6_server (IPv6 server) bool false + +[**Advanced] + +# How many blocks are flying in the wire simultaneously per client. +max_simultaneous_block_sends_per_client (Maximum simultaneously blocks send per client) int 10 + +# How many blocks are flying in the wire simultaneously for the whole server. +max_simultaneous_block_sends_server_total (Maximum simultaneously bocks send total) int 40 + +# To reduce lag, block transfers are slowed down when a player is building something. +# This determines how long they are slowed down after placing or removing a node. +full_block_send_enable_min_time_from_building () float 2.0 + +# Maximum number of packets sent per send step, if you have a slow connection +# try reducing it, but don't reduce it to a number below double of targeted +# client number. +max_packets_per_iteration (Max. packets per iteration) int 1024 + +[*Game] + +# Default game when creating a new world. +# This will be overridden when creating a world from the main menu. +default_game (Default game) string minetest + +# Message of the day displayed to players connecting. +motd (Message of the day) string + +# Maximum number of players that can connect simultaneously. +max_users (Maximum users) int 15 + +# World directory (everything in the world is stored here). +# Not needed if starting from the main menu. +map-dir (Map directory) path + +# Time in seconds for item entity (dropped items) to live. +# Setting it to -1 disables the feature. +item_entity_ttl (Item entity TTL) int 900 + +# Enable players getting damage and dying. +enable_damage (Damage) bool false + +# A chosen map seed for a new map, leave empty for random. +# Will be overridden when creating a new world in the main menu. +fixed_map_seed (Fixed map seed) string + +# New users need to input this password. +default_password (Default password) string + +# The privileges that new users automatically get. +# See /privs in game for a full list on your server and mod configuration. +default_privs (Default privileges) string interact, shout + +# Whether players are shown to clients without any range limit. +# Deprecated, use the setting player_transfer_distance instead. +unlimited_player_transfer_distance (Unlimited player transfer distance) bool true + +# Defines the maximal player transfer distance in blocks (0 = unlimited). +player_transfer_distance (Player transfer distance) int 0 + +# Whether to allow players to damage and kill each other. +enable_pvp (Player versus Player) bool true + +# If this is set, players will always (re)spawn at the given position. +static_spawnpoint (Static spawnpoint) string + +# Maximum distance above water level for player spawn. +# Larger values result in spawn points closer to (x = 0, z = 0). +# Smaller values may result in a suitable spawn point not being found, +# resulting in a spawn at (0, 0, 0) possibly buried underground. +vertical_spawn_range (Vertical spawn range) int 16 + +# If enabled, new players cannot join with an empty password. +disallow_empty_password (Disallow empty passwords) bool false + +# If enabled, disable cheat prevention in multiplayer. +disable_anticheat (Disable anticheat) bool false + +# If enabled, actions are recorded for rollback. +# This option is only read when server starts. +enable_rollback_recording (Rollback recording) bool false + +# A message to be displayed to all clients when the server shuts down. +kick_msg_shutdown (Shutdown message) string Server shutting down. + +# A message to be displayed to all clients when the server crashes. +kick_msg_crash (Crash message) string This server has experienced an internal error. You will now be disconnected. + +# Whether to ask clients to reconnect after a (Lua) crash. +# Set this to true if your server is set up to restart automatically. +ask_reconnect_on_crash (Ask to reconnect after crash) bool false + +# From how far clients know about objects, stated in mapblocks (16 nodes). +active_object_send_range_blocks (Active object send range) int 3 + +# How large area of blocks are subject to the active block stuff, stated in mapblocks (16 nodes). +# In active blocks objects are loaded and ABMs run. +active_block_range (Active block range) int 2 + +# From how far blocks are sent to clients, stated in mapblocks (16 nodes). +max_block_send_distance (Max block send distance) int 10 + +# Maximum number of forceloaded mapblocks. +max_forceloaded_blocks (Maximum forceloaded blocks) int 16 + +# Interval of sending time of day to clients. +time_send_interval (Time send interval) int 5 + +# Controls length of day/night cycle. +# Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged. +time_speed (Time speed) int 72 + +# Interval of saving important changes in the world, stated in seconds. +server_map_save_interval (Map save interval) float 5.3 + +[**Physics] + +movement_acceleration_default (Default acceleration) float 3 +movement_acceleration_air (Acceleration in air) float 2 +movement_acceleration_fast (Fast mode acceleration) float 10 +movement_speed_walk (Walking speed) float 4 +movement_speed_crouch (Crouch speed) float 1.35 +movement_speed_fast (Fast mode speed) float 20 +movement_speed_climb (Climbing speed) float 2 +movement_speed_jump (Jumping speed) float 6.5 +movement_speed_descend (Descending speed) float 6 +movement_liquid_fluidity (Liquid fluidity) float 1 +movement_liquid_fluidity_smooth (Liquid fluidity smoothing) float 0.5 +movement_liquid_sink (Liquid sink) float 10 +movement_gravity (Gravity) float 9.81 + +[**Advanced] + +# Handling for deprecated lua api calls: +# - legacy: (try to) mimic old behaviour (default for release). +# - log: mimic and log backtrace of deprecated call (default for debug). +# - error: abort on usage of deprecated call (suggested for mod developers). +deprecated_lua_api_handling (Deprecated Lua API handling) enum legacy legacy,log,error + +# Useful for mod developers. +mod_profiling (Mod profiling) bool false + +# Detailed mod profile data. Useful for mod developers. +detailed_profiling (Detailed mod profiling) bool false + +# Profiler data print interval. 0 = disable. Useful for developers. +profiler_print_interval (Profiling print interval) int 0 + +# Number of extra blocks that can be loaded by /clearobjects at once. +# This is a trade-off between sqlite transaction overhead and +# memory consumption (4096=100MB, as a rule of thumb). +max_clearobjects_extra_loaded_blocks (Max. clearobjects extra blocks) int 4096 + +# How much the server will wait before unloading unused mapblocks. +# Higher value is smoother, but will use more RAM. +server_unload_unused_data_timeout (Unload unused server data) int 29 + +# Maximum number of statically stored objects in a block. +max_objects_per_block (Maxmimum objects per block) int 49 + +# See http://www.sqlite.org/pragma.html#pragma_synchronous +sqlite_synchronous (Synchronous SQLite) enum 2 0,1,2 + +# Length of a server tick and the interval at which objects are generally updated over network. +dedicated_server_step (Dedicated server step) float 0.1 + +# If enabled, invalid world data won't cause the server to shut down. +# Only enable this if you know what you are doing. +ignore_world_load_errors (Ignore world errors) bool false + +# Max liquids processed per step. +liquid_loop_max (Liquid loop max) int 100000 + +# The time (in seconds) that the liquids queue may grow beyond processing +# capacity until an attempt is made to decrease its size by dumping old queue +# items. A value of 0 disables the functionality. +liquid_queue_purge_time (Liquid queue purge time) int 0 + +# Liquid update interval in seconds. +liquid_update (Liquid update tick) float 1.0 + +[*Mapgen] + +# Name of map generator to be used when creating a new world. +# Creating a world in the main menu will override this. +mg_name (Mapgen name) enum v6 v5,v6,v7,singlenode + +# Water surface level of the world. +water_level (Water level) int 1 + +# From how far blocks are generated for clients, stated in mapblocks (16 nodes). +max_block_generate_distance (Max block generate distance) int 6 + +# Where the map generator stops. +# Please note: +# - Limited to 31000 (setting above has no effect) +# - The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks). +# - Those groups have an offset of -32, -32 nodes from the origin. +# - Only groups which are within the map_generation_limit are generated +map_generation_limit (Map generation limit) int 31000 0 31000 + +# Global map generation attributes. +# Flags that are not specified in the flag string are not modified from the default. +# Flags starting with "no" are used to explicitly disable them. +# 'trees' and 'flat' flags only have effect in mgv6. +mg_flags (Mapgen flags) flags trees,caves,dungeons,light trees,caves,dungeons,light,flat,notrees,nocaves,nodungeons,nolight,noflat + +[**Advanced] + +# Size of chunks to be generated at once by mapgen, stated in mapblocks (16 nodes). +chunksize (Chunk size) int 5 + +# Dump the mapgen debug infos. +enable_mapgen_debug_info (Mapgen debug) bool false + +# Maximum number of blocks that can be queued for loading. +emergequeue_limit_total (Absolute limit of emerge queues) int 256 + +# Maximum number of blocks to be queued that are to be loaded from file. +# Set to blank for an appropriate amount to be chosen automatically. +emergequeue_limit_diskonly (Limit of emerge queues on disk) int 32 + +# Maximum number of blocks to be queued that are to be generated. +# Set to blank for an appropriate amount to be chosen automatically. +emergequeue_limit_generate (Limit of emerge queues to generate) int 32 + +# Number of emerge threads to use. Make this field blank, or increase this number +# to use multiple threads. On multiprocessor systems, this will improve mapgen speed greatly +# at the cost of slightly buggy caves. +num_emerge_threads (Number of emerge threads) int 1 + +# Noise parameters for biome API temperature, humidity and biome blend. +mg_biome_np_heat (Mapgen biome heat noise parameters) noise_params 50, 50, (750, 750, 750), 5349, 3, 0.5, 2.0 +mg_biome_np_heat_blend (Mapgen heat blend noise parameters) noise_params 0, 1.5, (8, 8, 8), 13, 2, 1.0, 2.0 +mg_biome_np_humidity (Mapgen biome humidity noise parameters) noise_params 50, 50, (750, 750, 750), 842, 3, 0.5, 2.0 +mg_biome_np_humidity_blend (Mapgen biome humidity blend noise parameters) noise_params 0, 1.5, (8, 8, 8), 90003, 2, 1.0, 2.0 + +[***Mapgen v5] + +mgv5_np_filler_depth (Mapgen v5 filler depth noise parameters) noise_params 0, 1, (150, 150, 150), 261, 4, 0.7, 2.0 +mgv5_np_factor (Mapgen v5 factor noise parameters) noise_params 0, 1, (250, 250, 250), 920381, 3, 0.45, 2.0 +mgv5_np_height (Mapgen v5 height noise parameters) noise_params 0, 10, (250, 250, 250), 84174, 4, 0.5, 2.0 +mgv5_np_cave1 (Mapgen v5 cave1 noise parameters) noise_params 0, 12, (50, 50, 50), 52534, 4, 0.5, 2.0 +mgv5_np_cave2 (Mapgen v5 cave2 noise parameters) noise_params 0, 12, (50, 50, 50), 10325, 4, 0.5, 2.0 +# TODO +#mgv5_np_ground = { +# offset = 0 +# scale = 40 +# spread = (80, 80, 80) +# seed = 983240 +# octaves = 4 +# persistence = 0.55 +# lacunarity = 2.0 +# flags = "eased" +#} + +[***Mapgen v6] + +# Map generation attributes specific to Mapgen V6. +# When snowbiomes are enabled jungles are enabled and the jungles flag is ignored. +# Flags that are not specified in the flag string are not modified from the default. +# Flags starting with "no" are used to explicitly disable them. +mgv6_spflags (Mapgen v6 flags) flags jungles,biomeblend,mudflow,snowbiomes jungles,biomeblend,mudflow,snowbiomes,nojungles,nobiomeblend,nomudflow,nosnowbiomes + +# Controls size of deserts and beaches in Mapgen V6. +# When snowbiomes are enabled 'mgv6_freq_desert' is ignored. +mgv6_freq_desert (Mapgen v6 desert frequency) float 0.45 +mgv6_freq_beach (Mapgen v6 beach frequency) float 0.15 + +mgv6_np_terrain_base (Mapgen v6 terrain base noise parameters) noise_params -4, 20, (250, 250, 250), 82341, 5, 0.6, 2.0 +mgv6_np_terrain_higher (Mapgen v6 terrain altitude noise parameters) noise_params 20, 16, (500, 500, 500), 85039, 5, 0.6, 2.0 +mgv6_np_steepness (Mapgen v6 steepness noise parameters) noise_params 0.85, 0.5, (125, 125, 125), -932, 5, 0.7, 2.0 +mgv6_np_height_select (Mapgen v6 height select noise parameters) noise_params 0.5, 1, (250, 250, 250), 4213, 5, 0.69, 2.0 +mgv6_np_mud (Mapgen v6 mud noise parameters) noise_params 4, 2, (200, 200, 200), 91013, 3, 0.55, 2.0 +mgv6_np_beach (Mapgen v6 beach noise parameters) noise_params 0, 1, (250, 250, 250), 59420, 3, 0.50, 2.0 +mgv6_np_biome (Mapgen v6 biome noise parameters) noise_params 0, 1, (500, 500, 500), 9130, 3, 0.50, 2.0 +mgv6_np_cave (Mapgen v6 cave noise parameters) noise_params 6, 6, (250, 250, 250), 34329, 3, 0.50, 2.0 +mgv6_np_humidity (Mapgen v6 humidity noise parameters) noise_params 0.5, 0.5, (500, 500, 500), 72384, 3, 0.50, 2.0 +mgv6_np_trees (Mapgen v6 trees noise parameters) noise_params 0, 1, (125, 125, 125), 2, 4, 0.66, 2.0 +mgv6_np_apple_trees (Mapgen v6 apple trees noise parameters) noise_params 0, 1, (100, 100, 100), 342902, 3, 0.45, 2.0 + +[***Mapgen v7] +# Map generation attributes specific to Mapgen V7. +# 'ridges' are the rivers. +# Flags that are not specified in the flag string are not modified from the default. +# Flags starting with "no" are used to explicitly disable them. +mgv7_spflags (Mapgen v7 flags) flags mountains,ridges mountains,ridges,nomountains,noridges + +mgv7_np_terrain_base (Mapgen v7 terrain base noise parameters) noise_params 4, 70, (600, 600, 600), 82341, 5, 0.6, 2.0 +mgv7_np_terrain_alt (Mapgen v7 terrain altitude noise parameters) noise_params 4, 25, (600, 600, 600), 5934, 5, 0.6, 2.0 +mgv7_np_terrain_persist (Mapgen v7 terrain persistation noise parameters) noise_params 0.6, 0.1, (2000, 2000, 2000), 539, 3, 0.6, 2.0 +mgv7_np_height_select (Mapgen v7 height select noise parameters) noise_params -12, 24, (500, 500, 500), 4213, 6, 0.7, 2.0 +mgv7_np_filler_depth (Mapgen v7 filler depth noise parameters) noise_params 0, 1.2, (150, 150, 150), 261, 3, 0.7, 2.0 +mgv7_np_mount_height (Mapgen v7 mount height noise parameters) noise_params 256, 112, (1000, 1000, 1000), 72449, 3, 0.6, 2.0 +mgv7_np_ridge_uwater (Mapgen v7 ridge water noise parameters) noise_params 0, 1, (1000, 1000, 1000), 85039, 5, 0.6, 2.0 +mgv7_np_mountain (Mapgen v7 mountain noise parameters) noise_params -0.6, 1, (250, 350, 250), 5333, 5, 0.63, 2.0 +mgv7_np_ridge (Mapgen v7 ridge noise parameters) noise_params 0, 1, (100, 100, 100), 6467, 4, 0.75, 2.0 +mgv7_np_cave1 (Mapgen v7 cave1 noise parameters) noise_params 0, 12, (100, 100, 100), 52534, 4, 0.5, 2.0 +mgv7_np_cave2 (Mapgen v7 cave2 noise parameters) noise_params 0, 12, (100, 100, 100), 10325, 4, 0.5, 2.0 + +[*Security] + +# Prevent mods from doing insecure things like running shell commands. +secure.enable_security (Enable mod security) bool false + +# Comma-separated list of trusted mods that are allowed to access insecure +# functions even when mod security is on (via request_insecure_environment()). +secure.trusted_mods (Trusted mods) string + +[Client and Server] + +# Name of the player. +# When running a server, clients connecting with this name are admins. +# When starting from the main menu, this is overridden. +name (Player name) string + +# Set the language. Leave empty to use the system language. +# A restart is required after changing this. +language (Language) enum ,be,cs,da,de,eo,es,et,fr,hu,id,it,ja,jbo,ko,ky,lt,nb,nl,pl,pt,pt_BR,ro,ru,tr,uk,zh_CN,zh_TW + +# Level of logging to be written to debug.txt: +# - (no logging) +# - none (messages with no level) +# - error +# - warning +# - action +# - info +# - verbose +debug_log_level (Debug log level) enum action ,warning,action,info,verbose + +# IPv6 support. +enable_ipv6 (IPv6) bool true + +[*Advanced] + +# Default timeout for cURL, stated in milliseconds. +# Only has an effect if compiled with cURL. +curl_timeout (cURL timeout) int 5000 + +# Limits number of parallel HTTP requests. Affects: +# - Media fetch if server uses remote_media setting. +# - Serverlist download and server announcement. +# - Downloads performed by main menu (e.g. mod manager). +# Only has an effect if compiled with cURL. +curl_parallel_limit (cURL parallel limit) int 8 + +# Maximum time in ms a file download (e.g. a mod download) may take. +curl_file_download_timeout (cURL file download timeout) int 300000 + +# Makes DirectX work with LuaJIT. Disable if it causes troubles. +high_precision_fpu (High-precision FPU) bool true + +# Replaces the default main menu with a custom one. +main_menu_script (Main menu script) string + +main_menu_game_mgr (Main menu game manager) int 0 + +main_menu_mod_mgr (Main menu mod manager) int 1 + +modstore_download_url (Modstore download URL) string https://forum.minetest.net/media/ + +modstore_listmods_url (Modstore mods list URL) string https://forum.minetest.net/mmdb/mods/ + +modstore_details_url (Modstore details URL) string https://forum.minetest.net/mmdb/mod/*/ diff --git a/client/shaders/minimap_shader/opengl_fragment.glsl b/client/shaders/minimap_shader/opengl_fragment.glsl new file mode 100644 index 00000000..fa4f9cb1 --- /dev/null +++ b/client/shaders/minimap_shader/opengl_fragment.glsl @@ -0,0 +1,32 @@ +uniform sampler2D baseTexture; +uniform sampler2D normalTexture; +uniform vec3 yawVec; + +void main (void) +{ + vec2 uv = gl_TexCoord[0].st; + + //texture sampling rate + const float step = 1.0 / 256.0; + float tl = texture2D(normalTexture, vec2(uv.x - step, uv.y + step)).r; + float t = texture2D(normalTexture, vec2(uv.x - step, uv.y - step)).r; + float tr = texture2D(normalTexture, vec2(uv.x + step, uv.y + step)).r; + float r = texture2D(normalTexture, vec2(uv.x + step, uv.y)).r; + float br = texture2D(normalTexture, vec2(uv.x + step, uv.y - step)).r; + float b = texture2D(normalTexture, vec2(uv.x, uv.y - step)).r; + float bl = texture2D(normalTexture, vec2(uv.x - step, uv.y - step)).r; + float l = texture2D(normalTexture, vec2(uv.x - step, uv.y)).r; + float dX = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl); + float dY = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr); + vec4 bump = vec4 (normalize(vec3 (dX, dY, 0.1)),1.0); + float height = 2.0 * texture2D(normalTexture, vec2(uv.x, uv.y)).r - 1.0; + vec4 base = texture2D(baseTexture, uv).rgba; + vec3 L = normalize(vec3(0.0, 0.75, 1.0)); + float specular = pow(clamp(dot(reflect(L, bump.xyz), yawVec), 0.0, 1.0), 1.0); + float diffuse = dot(yawVec, bump.xyz); + + vec3 color = (1.1 * diffuse + 0.05 * height + 0.5 * specular) * base.rgb; + vec4 col = vec4(color.rgb, base.a); + col *= gl_Color; + gl_FragColor = vec4(col.rgb, base.a); +} diff --git a/client/shaders/minimap_shader/opengl_vertex.glsl b/client/shaders/minimap_shader/opengl_vertex.glsl new file mode 100644 index 00000000..06df5a3c --- /dev/null +++ b/client/shaders/minimap_shader/opengl_vertex.glsl @@ -0,0 +1,11 @@ +uniform mat4 mWorldViewProj; +uniform mat4 mInvWorld; +uniform mat4 mTransWorld; +uniform mat4 mWorld; + +void main(void) +{ + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_Position = mWorldViewProj * gl_Vertex; + gl_FrontColor = gl_BackColor = gl_Color; +} diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl index 6dc96eb4..424d3217 100644 --- a/client/shaders/nodes_shader/opengl_fragment.glsl +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -1,6 +1,6 @@ uniform sampler2D baseTexture; uniform sampler2D normalTexture; -uniform sampler2D useNormalmap; +uniform sampler2D textureFlags; uniform vec4 skyBgColor; uniform float fogDistance; @@ -8,91 +8,137 @@ uniform vec3 eyePosition; varying vec3 vPosition; varying vec3 worldPosition; +varying float area_enable_parallax; varying vec3 eyeVec; varying vec3 tsEyeVec; varying vec3 lightVec; varying vec3 tsLightVec; -bool normalTexturePresent = false; +bool normalTexturePresent = false; const float e = 2.718281828459; const float BS = 10.0; - -float intensity (vec3 color){ + +void get_texture_flags() +{ + vec4 flags = texture2D(textureFlags, vec2(0.0, 0.0)); + if (flags.r > 0.5) { + normalTexturePresent = true; + } +} + +float intensity(vec3 color) +{ return (color.r + color.g + color.b) / 3.0; } -float get_rgb_height (vec2 uv){ - return intensity(texture2D(baseTexture,uv).rgb); +float get_rgb_height(vec2 uv) +{ + return intensity(texture2D(baseTexture, uv).rgb); } -vec4 get_normal_map(vec2 uv){ +vec4 get_normal_map(vec2 uv) +{ vec4 bump = texture2D(normalTexture, uv).rgba; - bump.xyz = normalize(bump.xyz * 2.0 -1.0); - bump.y = -bump.y; + bump.xyz = normalize(bump.xyz * 2.0 - 1.0); return bump; } -void main (void) +float find_intersection(vec2 dp, vec2 ds) +{ + const float depth_step = 1.0 / 24.0; + float depth = 1.0; + for (int i = 0 ; i < 24 ; i++) { + float h = texture2D(normalTexture, dp + ds * depth).a; + if (h >= depth) + break; + depth -= depth_step; + } + return depth; +} + +float find_intersectionRGB(vec2 dp, vec2 ds) +{ + const float depth_step = 1.0 / 24.0; + float depth = 1.0; + for (int i = 0 ; i < 24 ; i++) { + float h = get_rgb_height(dp + ds * depth); + if (h >= depth) + break; + depth -= depth_step; + } + return depth; +} + +void main(void) { vec3 color; vec4 bump; vec2 uv = gl_TexCoord[0].st; bool use_normalmap = false; - -#ifdef USE_NORMALMAPS - if (texture2D(useNormalmap,vec2(1.0,1.0)).r > 0.0){ - normalTexturePresent = true; - } -#endif + get_texture_flags(); #ifdef ENABLE_PARALLAX_OCCLUSION - if (normalTexturePresent){ - vec3 tsEye = normalize(tsEyeVec); - float height = PARALLAX_OCCLUSION_SCALE * texture2D(normalTexture, uv).a - PARALLAX_OCCLUSION_BIAS; - uv = uv + texture2D(normalTexture, uv).z * height * vec2(tsEye.x,-tsEye.y); + vec2 eyeRay = vec2 (tsEyeVec.x, -tsEyeVec.y); + const float scale = PARALLAX_OCCLUSION_SCALE / PARALLAX_OCCLUSION_ITERATIONS; + const float bias = PARALLAX_OCCLUSION_BIAS / PARALLAX_OCCLUSION_ITERATIONS; + +#if PARALLAX_OCCLUSION_MODE == 0 + // Parallax occlusion with slope information + if (normalTexturePresent && area_enable_parallax > 0.0) { + for (int i = 0; i < PARALLAX_OCCLUSION_ITERATIONS; i++) { + vec4 normal = texture2D(normalTexture, uv.xy); + float h = normal.a * scale - bias; + uv += h * normal.z * eyeRay; + } +#endif + +#if PARALLAX_OCCLUSION_MODE == 1 + // Relief mapping + if (normalTexturePresent && area_enable_parallax > 0.0) { + vec2 ds = eyeRay * PARALLAX_OCCLUSION_SCALE; + float dist = find_intersection(uv, ds); + uv += dist * ds; +#endif + } else if (GENERATE_NORMALMAPS == 1 && area_enable_parallax > 0.0) { + vec2 ds = eyeRay * PARALLAX_OCCLUSION_SCALE; + float dist = find_intersectionRGB(uv, ds); + uv += dist * ds; } #endif -#ifdef USE_NORMALMAPS - if (normalTexturePresent){ +#if USE_NORMALMAPS == 1 + if (normalTexturePresent) { bump = get_normal_map(uv); use_normalmap = true; - } -#endif - -#ifdef GENERATE_NORMALMAPS - if (use_normalmap == false){ - float tl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y+SAMPLE_STEP)); - float t = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP)); - float tr = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y+SAMPLE_STEP)); - float r = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y)); - float br = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y-SAMPLE_STEP)); - float b = get_rgb_height (vec2(uv.x,uv.y-SAMPLE_STEP)); - float bl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP)); - float l = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y)); - float dX = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl); - float dY = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr); - bump = vec4 (normalize(vec3 (dX, -dY, NORMALMAPS_STRENGTH)),1.0); - use_normalmap = true; } #endif -vec4 base = texture2D(baseTexture, uv).rgba; - + if (GENERATE_NORMALMAPS == 1 && normalTexturePresent == false) { + float tl = get_rgb_height(vec2(uv.x - SAMPLE_STEP, uv.y + SAMPLE_STEP)); + float t = get_rgb_height(vec2(uv.x - SAMPLE_STEP, uv.y - SAMPLE_STEP)); + float tr = get_rgb_height(vec2(uv.x + SAMPLE_STEP, uv.y + SAMPLE_STEP)); + float r = get_rgb_height(vec2(uv.x + SAMPLE_STEP, uv.y)); + float br = get_rgb_height(vec2(uv.x + SAMPLE_STEP, uv.y - SAMPLE_STEP)); + float b = get_rgb_height(vec2(uv.x, uv.y - SAMPLE_STEP)); + float bl = get_rgb_height(vec2(uv.x -SAMPLE_STEP, uv.y - SAMPLE_STEP)); + float l = get_rgb_height(vec2(uv.x - SAMPLE_STEP, uv.y)); + float dX = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl); + float dY = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr); + bump = vec4(normalize(vec3 (dX, dY, NORMALMAPS_STRENGTH)), 1.0); + use_normalmap = true; + } + + vec4 base = texture2D(baseTexture, uv).rgba; + #ifdef ENABLE_BUMPMAPPING - if (use_normalmap){ + if (use_normalmap) { vec3 L = normalize(lightVec); vec3 E = normalize(eyeVec); - float specular = pow(clamp(dot(reflect(L, bump.xyz), E), 0.0, 1.0),0.5); - float diffuse = dot(E,bump.xyz); - /* Mathematic optimization - * Original: color = 0.05*base.rgb + diffuse*base.rgb + 0.2*specular*base.rgb; - * This optimization save 2 multiplications (orig: 4 multiplications + 3 additions - * end: 2 multiplications + 3 additions) - */ - color = (0.05 + diffuse + 0.2 * specular) * base.rgb; + float specular = pow(clamp(dot(reflect(L, bump.xyz), E), 0.0, 1.0), 1.0); + float diffuse = dot(-E,bump.xyz); + color = (diffuse + 0.1 * specular) * base.rgb; } else { color = base.rgb; } @@ -104,7 +150,7 @@ vec4 base = texture2D(baseTexture, uv).rgba; float alpha = gl_Color.a; vec4 col = vec4(color.rgb, alpha); col *= gl_Color; - if(fogDistance != 0.0){ + if (fogDistance != 0.0) { float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0)); alpha = mix(alpha, 0.0, d); } @@ -112,7 +158,7 @@ vec4 base = texture2D(baseTexture, uv).rgba; #else vec4 col = vec4(color.rgb, base.a); col *= gl_Color; - if(fogDistance != 0.0){ + if (fogDistance != 0.0) { float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0)); col = mix(col, skyBgColor, d); } diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl index 07684f61..91536ba1 100644 --- a/client/shaders/nodes_shader/opengl_vertex.glsl +++ b/client/shaders/nodes_shader/opengl_vertex.glsl @@ -14,105 +14,108 @@ varying vec3 eyeVec; varying vec3 lightVec; varying vec3 tsEyeVec; varying vec3 tsLightVec; +varying float area_enable_parallax; +varying float disp; const float e = 2.718281828459; const float BS = 10.0; -float smoothCurve( float x ) { - return x * x *( 3.0 - 2.0 * x ); + +float smoothCurve(float x) +{ + return x * x * (3.0 - 2.0 * x); } -float triangleWave( float x ) { - return abs( fract( x + 0.5 ) * 2.0 - 1.0 ); + + +float triangleWave(float x) +{ + return abs(fract(x + 0.5) * 2.0 - 1.0); } -float smoothTriangleWave( float x ) { - return smoothCurve( triangleWave( x ) ) * 2.0 - 1.0; + + +float smoothTriangleWave(float x) +{ + return smoothCurve(triangleWave(x)) * 2.0 - 1.0; } + void main(void) { gl_TexCoord[0] = gl_MultiTexCoord0; - -#if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER + //TODO: make offset depending on view angle and parallax uv displacement + //thats for textures that doesnt align vertically, like dirt with grass + //gl_TexCoord[0].y += 0.008; + + //Allow parallax/relief mapping only for certain kind of nodes + //Variable is also used to control area of the effect +#if (DRAW_TYPE == NDT_NORMAL || DRAW_TYPE == NDT_LIQUID || DRAW_TYPE == NDT_FLOWINGLIQUID) + area_enable_parallax = 1.0; +#else + area_enable_parallax = 0.0; +#endif + + +#if (MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES) || (MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS) + vec4 pos2 = mWorld * gl_Vertex; + float tOffset = (pos2.x + pos2.y) * 0.001 + pos2.z * 0.002; + disp = (smoothTriangleWave(animationTimer * 31.0 + tOffset) + + smoothTriangleWave(animationTimer * 29.0 + tOffset) + + smoothTriangleWave(animationTimer * 13.0 + tOffset)) - 0.9; +#endif + + +#if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER vec4 pos = gl_Vertex; pos.y -= 2.0; - float posYbuf = (pos.z / WATER_WAVE_LENGTH + animationTimer * WATER_WAVE_SPEED * WATER_WAVE_LENGTH); - pos.y -= sin(posYbuf) * WATER_WAVE_HEIGHT + sin(posYbuf / 7.0) * WATER_WAVE_HEIGHT; gl_Position = mWorldViewProj * pos; #elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES && ENABLE_WAVING_LEAVES vec4 pos = gl_Vertex; - vec4 pos2 = mWorld * gl_Vertex; - - /* - * Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition) - * replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication) - * And bufferize calcul to a float - */ - float pos2XpZ = pos2.x + pos2.z; - - pos.x += (smoothTriangleWave(animationTimer*10.0 + pos2XpZ * 0.01) * 2.0 - 1.0) * 0.4; - pos.y += (smoothTriangleWave(animationTimer*15.0 + pos2XpZ * -0.01) * 2.0 - 1.0) * 0.2; - pos.z += (smoothTriangleWave(animationTimer*10.0 + pos2XpZ * -0.01) * 2.0 - 1.0) * 0.4; + pos.x += disp * 0.1; + pos.y += disp * 0.1; + pos.z += disp; gl_Position = mWorldViewProj * pos; #elif MATERIAL_TYPE == TILE_MATERIAL_WAVING_PLANTS && ENABLE_WAVING_PLANTS vec4 pos = gl_Vertex; - vec4 pos2 = mWorld * gl_Vertex; if (gl_TexCoord[0].y < 0.05) { - /* - * Mathematic optimization: pos2.x * A + pos2.z * A (2 multiplications + 1 addition) - * replaced with: (pos2.x + pos2.z) * A (1 addition + 1 multiplication) - * And bufferize calcul to a float - */ - float pos2XpZ = pos2.x + pos2.z; - - pos.x += (smoothTriangleWave(animationTimer * 20.0 + pos2XpZ * 0.1) * 2.0 - 1.0) * 0.8; - pos.y -= (smoothTriangleWave(animationTimer * 10.0 + pos2XpZ * -0.5) * 2.0 - 1.0) * 0.4; + pos.z += disp; } gl_Position = mWorldViewProj * pos; #else gl_Position = mWorldViewProj * gl_Vertex; #endif + vPosition = gl_Position.xyz; worldPosition = (mWorld * gl_Vertex).xyz; + + // Don't generate heightmaps when too far from the eye + float dist = distance (vec3(0.0, 0.0 ,0.0), vPosition); + if (dist > 150.0) { + area_enable_parallax = 0.0; + } + vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0); vec3 normal, tangent, binormal; normal = normalize(gl_NormalMatrix * gl_Normal); - if (gl_Normal.x > 0.5) { - // 1.0, 0.0, 0.0 - tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, -1.0)); - binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0)); - } else if (gl_Normal.x < -0.5) { - // -1.0, 0.0, 0.0 - tangent = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0)); - binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0)); - } else if (gl_Normal.y > 0.5) { - // 0.0, 1.0, 0.0 - tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0)); - binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0)); - } else if (gl_Normal.y < -0.5) { - // 0.0, -1.0, 0.0 - tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0)); - binormal = normalize(gl_NormalMatrix * vec3( 0.0, 0.0, 1.0)); - } else if (gl_Normal.z > 0.5) { - // 0.0, 0.0, 1.0 - tangent = normalize(gl_NormalMatrix * vec3( 1.0, 0.0, 0.0)); - binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0)); - } else if (gl_Normal.z < -0.5) { - // 0.0, 0.0, -1.0 - tangent = normalize(gl_NormalMatrix * vec3(-1.0, 0.0, 0.0)); - binormal = normalize(gl_NormalMatrix * vec3( 0.0, -1.0, 0.0)); - } - mat3 tbnMatrix = mat3( tangent.x, binormal.x, normal.x, - tangent.y, binormal.y, normal.y, - tangent.z, binormal.z, normal.z); + tangent = normalize(gl_NormalMatrix * gl_MultiTexCoord1.xyz); + binormal = normalize(gl_NormalMatrix * gl_MultiTexCoord2.xyz); + + vec3 v; lightVec = sunPosition - worldPosition; - tsLightVec = lightVec * tbnMatrix; - eyeVec = (gl_ModelViewMatrix * gl_Vertex).xyz; - tsEyeVec = eyeVec * tbnMatrix; + v.x = dot(lightVec, tangent); + v.y = dot(lightVec, binormal); + v.z = dot(lightVec, normal); + tsLightVec = normalize (v); + + eyeVec = -(gl_ModelViewMatrix * gl_Vertex).xyz; + v.x = dot(eyeVec, tangent); + v.y = dot(eyeVec, binormal); + v.z = dot(eyeVec, normal); + tsEyeVec = normalize (v); vec4 color; float day = gl_Color.r; diff --git a/client/shaders/water_surface_shader/opengl_fragment.glsl b/client/shaders/water_surface_shader/opengl_fragment.glsl index 6dc96eb4..75751e24 100644 --- a/client/shaders/water_surface_shader/opengl_fragment.glsl +++ b/client/shaders/water_surface_shader/opengl_fragment.glsl @@ -1,6 +1,6 @@ uniform sampler2D baseTexture; uniform sampler2D normalTexture; -uniform sampler2D useNormalmap; +uniform sampler2D textureFlags; uniform vec4 skyBgColor; uniform float fogDistance; @@ -14,41 +14,59 @@ varying vec3 tsEyeVec; varying vec3 lightVec; varying vec3 tsLightVec; -bool normalTexturePresent = false; +bool normalTexturePresent = false; +bool texTileableHorizontal = false; +bool texTileableVertical = false; +bool texSeamless = false; const float e = 2.718281828459; const float BS = 10.0; - -float intensity (vec3 color){ + +void get_texture_flags() +{ + vec4 flags = texture2D(textureFlags, vec2(0.0, 0.0)); + if (flags.r > 0.5) { + normalTexturePresent = true; + } + if (flags.g > 0.5) { + texTileableHorizontal = true; + } + if (flags.b > 0.5) { + texTileableVertical = true; + } + if (texTileableHorizontal && texTileableVertical) { + texSeamless = true; + } +} + +float intensity(vec3 color) +{ return (color.r + color.g + color.b) / 3.0; } -float get_rgb_height (vec2 uv){ +float get_rgb_height(vec2 uv) +{ return intensity(texture2D(baseTexture,uv).rgb); } -vec4 get_normal_map(vec2 uv){ +vec4 get_normal_map(vec2 uv) +{ vec4 bump = texture2D(normalTexture, uv).rgba; bump.xyz = normalize(bump.xyz * 2.0 -1.0); bump.y = -bump.y; return bump; } -void main (void) +void main(void) { vec3 color; vec4 bump; vec2 uv = gl_TexCoord[0].st; bool use_normalmap = false; - -#ifdef USE_NORMALMAPS - if (texture2D(useNormalmap,vec2(1.0,1.0)).r > 0.0){ - normalTexturePresent = true; - } -#endif + get_texture_flags(); #ifdef ENABLE_PARALLAX_OCCLUSION - if (normalTexturePresent){ + if (normalTexturePresent) { vec3 tsEye = normalize(tsEyeVec); float height = PARALLAX_OCCLUSION_SCALE * texture2D(normalTexture, uv).a - PARALLAX_OCCLUSION_BIAS; uv = uv + texture2D(normalTexture, uv).z * height * vec2(tsEye.x,-tsEye.y); @@ -56,14 +74,13 @@ void main (void) #endif #ifdef USE_NORMALMAPS - if (normalTexturePresent){ + if (normalTexturePresent) { bump = get_normal_map(uv); use_normalmap = true; } #endif - -#ifdef GENERATE_NORMALMAPS - if (use_normalmap == false){ + + if (GENERATE_NORMALMAPS == 1 && use_normalmap == false) { float tl = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y+SAMPLE_STEP)); float t = get_rgb_height (vec2(uv.x-SAMPLE_STEP,uv.y-SAMPLE_STEP)); float tr = get_rgb_height (vec2(uv.x+SAMPLE_STEP,uv.y+SAMPLE_STEP)); @@ -77,16 +94,15 @@ void main (void) bump = vec4 (normalize(vec3 (dX, -dY, NORMALMAPS_STRENGTH)),1.0); use_normalmap = true; } -#endif vec4 base = texture2D(baseTexture, uv).rgba; - + #ifdef ENABLE_BUMPMAPPING - if (use_normalmap){ + if (use_normalmap) { vec3 L = normalize(lightVec); vec3 E = normalize(eyeVec); - float specular = pow(clamp(dot(reflect(L, bump.xyz), E), 0.0, 1.0),0.5); - float diffuse = dot(E,bump.xyz); + float specular = pow(clamp(dot(reflect(L, bump.xyz), E), 0.0, 1.0),0.5); + float diffuse = dot(E,bump.xyz); /* Mathematic optimization * Original: color = 0.05*base.rgb + diffuse*base.rgb + 0.2*specular*base.rgb; * This optimization save 2 multiplications (orig: 4 multiplications + 3 additions diff --git a/client/shaders/water_surface_shader/opengl_vertex.glsl b/client/shaders/water_surface_shader/opengl_vertex.glsl index 6e70bbc3..7ae517d8 100644 --- a/client/shaders/water_surface_shader/opengl_vertex.glsl +++ b/client/shaders/water_surface_shader/opengl_vertex.glsl @@ -18,20 +18,23 @@ varying vec3 tsLightVec; const float e = 2.718281828459; const float BS = 10.0; -float smoothCurve( float x ) { - return x * x *( 3.0 - 2.0 * x ); +float smoothCurve(float x) +{ + return x * x * (3.0 - 2.0 * x); } -float triangleWave( float x ) { - return abs( fract( x + 0.5 ) * 2.0 - 1.0 ); +float triangleWave(float x) +{ + return abs(fract( x + 0.5 ) * 2.0 - 1.0); } -float smoothTriangleWave( float x ) { - return smoothCurve( triangleWave( x ) ) * 2.0 - 1.0; +float smoothTriangleWave(float x) +{ + return smoothCurve(triangleWave( x )) * 2.0 - 1.0; } void main(void) { gl_TexCoord[0] = gl_MultiTexCoord0; - + #if (MATERIAL_TYPE == TILE_MATERIAL_LIQUID_TRANSPARENT || MATERIAL_TYPE == TILE_MATERIAL_LIQUID_OPAQUE) && ENABLE_WAVING_WATER vec4 pos = gl_Vertex; pos.y -= 2.0; diff --git a/client/shaders/wielded_shader/opengl_fragment.glsl b/client/shaders/wielded_shader/opengl_fragment.glsl new file mode 100644 index 00000000..75dd1b67 --- /dev/null +++ b/client/shaders/wielded_shader/opengl_fragment.glsl @@ -0,0 +1,114 @@ +uniform sampler2D baseTexture; +uniform sampler2D normalTexture; +uniform sampler2D textureFlags; + +uniform vec4 skyBgColor; +uniform float fogDistance; +uniform vec3 eyePosition; + +varying vec3 vPosition; +varying vec3 worldPosition; + +varying vec3 eyeVec; +varying vec3 lightVec; + +bool normalTexturePresent = false; +bool texTileableHorizontal = false; +bool texTileableVertical = false; +bool texSeamless = false; + +const float e = 2.718281828459; +const float BS = 10.0; + +void get_texture_flags() +{ + vec4 flags = texture2D(textureFlags, vec2(0.0, 0.0)); + if (flags.r > 0.5) { + normalTexturePresent = true; + } + if (flags.g > 0.5) { + texTileableHorizontal = true; + } + if (flags.b > 0.5) { + texTileableVertical = true; + } + if (texTileableHorizontal && texTileableVertical) { + texSeamless = true; + } +} + +float intensity(vec3 color) +{ + return (color.r + color.g + color.b) / 3.0; +} + +float get_rgb_height(vec2 uv) +{ + if (texSeamless) { + return intensity(texture2D(baseTexture, uv).rgb); + } else { + return intensity(texture2D(baseTexture, clamp(uv, 0.0, 0.999)).rgb); + } +} + +vec4 get_normal_map(vec2 uv) +{ + vec4 bump = texture2D(normalTexture, uv).rgba; + bump.xyz = normalize(bump.xyz * 2.0 - 1.0); + return bump; +} + +void main(void) +{ + vec3 color; + vec4 bump; + vec2 uv = gl_TexCoord[0].st; + bool use_normalmap = false; + get_texture_flags(); + +#if USE_NORMALMAPS == 1 + if (normalTexturePresent) { + bump = get_normal_map(uv); + use_normalmap = true; + } +#endif + + if (GENERATE_NORMALMAPS == 1 && normalTexturePresent == false) { + float tl = get_rgb_height(vec2(uv.x - SAMPLE_STEP, uv.y + SAMPLE_STEP)); + float t = get_rgb_height(vec2(uv.x - SAMPLE_STEP, uv.y - SAMPLE_STEP)); + float tr = get_rgb_height(vec2(uv.x + SAMPLE_STEP, uv.y + SAMPLE_STEP)); + float r = get_rgb_height(vec2(uv.x + SAMPLE_STEP, uv.y)); + float br = get_rgb_height(vec2(uv.x + SAMPLE_STEP, uv.y - SAMPLE_STEP)); + float b = get_rgb_height(vec2(uv.x, uv.y - SAMPLE_STEP)); + float bl = get_rgb_height(vec2(uv.x -SAMPLE_STEP, uv.y - SAMPLE_STEP)); + float l = get_rgb_height(vec2(uv.x - SAMPLE_STEP, uv.y)); + float dX = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl); + float dY = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr); + bump = vec4(normalize(vec3 (dX, dY, NORMALMAPS_STRENGTH)), 1.0); + use_normalmap = true; + } + + vec4 base = texture2D(baseTexture, uv).rgba; + +#ifdef ENABLE_BUMPMAPPING + if (use_normalmap) { + vec3 L = normalize(lightVec); + vec3 E = normalize(eyeVec); + float specular = pow(clamp(dot(reflect(L, bump.xyz), E), 0.0, 1.0), 1.0); + float diffuse = dot(-E,bump.xyz); + color = (diffuse + 0.1 * specular) * base.rgb; + } else { + color = base.rgb; + } +#else + color = base.rgb; +#endif + + vec4 col = vec4(color.rgb, base.a); + col *= gl_Color; + if (fogDistance != 0.0) { + float d = max(0.0, min(vPosition.z / fogDistance * 1.5 - 0.6, 1.0)); + col = mix(col, skyBgColor, d); + } + gl_FragColor = vec4(col.rgb, base.a); +} diff --git a/client/shaders/wielded_shader/opengl_vertex.glsl b/client/shaders/wielded_shader/opengl_vertex.glsl new file mode 100644 index 00000000..c33b0a7d --- /dev/null +++ b/client/shaders/wielded_shader/opengl_vertex.glsl @@ -0,0 +1,35 @@ +uniform mat4 mWorldViewProj; +uniform mat4 mInvWorld; +uniform mat4 mTransWorld; +uniform mat4 mWorld; + +uniform float dayNightRatio; +uniform vec3 eyePosition; +uniform float animationTimer; + +varying vec3 vPosition; +varying vec3 worldPosition; + +varying vec3 eyeVec; +varying vec3 lightVec; +varying vec3 tsEyeVec; +varying vec3 tsLightVec; + +const float e = 2.718281828459; +const float BS = 10.0; + +void main(void) +{ + gl_TexCoord[0] = gl_MultiTexCoord0; + gl_Position = mWorldViewProj * gl_Vertex; + + vPosition = gl_Position.xyz; + worldPosition = (mWorld * gl_Vertex).xyz; + + vec3 sunPosition = vec3 (0.0, eyePosition.y * BS + 900.0, 0.0); + + lightVec = sunPosition - worldPosition; + eyeVec = -(gl_ModelViewMatrix * gl_Vertex).xyz; + + gl_FrontColor = gl_BackColor = gl_Color; +} diff --git a/cmake/Modules/FindJson.cmake b/cmake/Modules/FindJson.cmake index 8e355b93..1558b0fc 100644 --- a/cmake/Modules/FindJson.cmake +++ b/cmake/Modules/FindJson.cmake @@ -8,7 +8,7 @@ option(ENABLE_SYSTEM_JSONCPP "Enable using a system-wide JSONCPP. May cause seg if(ENABLE_SYSTEM_JSONCPP) find_library(JSON_LIBRARY NAMES jsoncpp) - find_path(JSON_INCLUDE_DIR json/features.h) + find_path(JSON_INCLUDE_DIR json/features.h PATH_SUFFIXES jsoncpp) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(JSONCPP DEFAULT_MSG JSON_LIBRARY JSON_INCLUDE_DIR) diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index 062fc67a..d35fbf65 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -12,6 +12,8 @@ SORT_MEMBERS_CTORS_1ST = YES WARN_IF_UNDOCUMENTED = NO INPUT = @CMAKE_CURRENT_SOURCE_DIR@/src/ \ + @CMAKE_CURRENT_SOURCE_DIR@/src/client \ + @CMAKE_CURRENT_SOURCE_DIR@/src/network \ @CMAKE_CURRENT_SOURCE_DIR@/src/util \ @CMAKE_CURRENT_SOURCE_DIR@/src/script \ @CMAKE_CURRENT_SOURCE_DIR@/src/script/common \ diff --git a/doc/Readme.txt b/doc/Readme.txt index 2be51e94..9f3fffd5 100644 --- a/doc/Readme.txt +++ b/doc/Readme.txt @@ -74,7 +74,7 @@ Compiling on GNU/Linux: ----------------------- Install dependencies. Here's an example for Debian/Ubuntu: -$ sudo apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng12-dev libjpeg8-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libjsoncpp-dev +$ sudo apt-get install build-essential libirrlicht-dev cmake libbz2-dev libpng12-dev libjpeg-dev libxxf86vm-dev libgl1-mesa-dev libsqlite3-dev libogg-dev libvorbis-dev libopenal-dev libcurl4-gnutls-dev libfreetype6-dev zlib1g-dev libgmp-dev libjsoncpp-dev You can install git for easily keeping your copy up to date. If you dont want git, read below on how to get the source without git. @@ -125,8 +125,10 @@ ENABLE_GETTEXT - Build with Gettext; Allows using translations ENABLE_GLES - Search for Open GLES headers & libraries and use them ENABLE_LEVELDB - Build with LevelDB; Enables use of LevelDB map backend (faster than SQLite3) ENABLE_REDIS - Build with libhiredis; Enables use of Redis map backend +ENABLE_SPATIAL - Build with LibSpatial; Speeds up AreaStores ENABLE_SOUND - Build with OpenAL, libogg & libvorbis; in-game Sounds ENABLE_LUAJIT - Build with LuaJIT (much faster than non-JIT Lua) +ENABLE_SYSTEM_GMP - Use GMP from system (much faster than bundled mini-gmp) RUN_IN_PLACE - Create a portable install (worlds, settings etc. in current directory) USE_GPROF - Enable profiling using GProf VERSION_EXTRA - Text to append to version (e.g. VERSION_EXTRA=foobar -> MultiCraft 0.1-foobar) @@ -149,14 +151,16 @@ GETTEXT_ICONV_DLL - Only when building with Gettext on Windows; pa GETTEXT_INCLUDE_DIR - Only when building with Gettext; directory that contains iconv.h GETTEXT_LIBRARY - Only when building with Gettext on Windows; path to libintl.dll.a GETTEXT_MSGFMT - Only when building with Gettext; path to msgfmt/msgfmt.exe -IRRLICHT_DLL - path to Irrlicht.dll -IRRLICHT_INCLUDE_DIR - directory that contains IrrCompileConfig.h -IRRLICHT_LIBRARY - path to libIrrlicht.a/libIrrlicht.so/libIrrlicht.dll.a +IRRLICHT_DLL - Only on Windows; path to Irrlicht.dll +IRRLICHT_INCLUDE_DIR - Directory that contains IrrCompileConfig.h +IRRLICHT_LIBRARY - Path to libIrrlicht.a/libIrrlicht.so/libIrrlicht.dll.a/Irrlicht.lib LEVELDB_INCLUDE_DIR - Only when building with LevelDB; directory that contains db.h LEVELDB_LIBRARY - Only when building with LevelDB; path to libleveldb.a/libleveldb.so/libleveldb.dll.a LEVELDB_DLL - Only when building with LevelDB on Windows; path to libleveldb.dll -REDIS_INCLUDE_DIR - Only when building with Redis support; directory that contains hiredis.h -REDIS_LIBRARY - Only when building with Redis support; path to libhiredis.a/libhiredis.so +REDIS_INCLUDE_DIR - Only when building with Redis; directory that contains hiredis.h +REDIS_LIBRARY - Only when building with Redis; path to libhiredis.a/libhiredis.so +SPATIAL_INCLUDE_DIR - Only when building with LibSpatial; directory that contains spatialindex/SpatialIndex.h +SPATIAL_LIBRARY - Only when building with LibSpatial; path to libspatialindex_c.so/spatialindex-32.lib LUA_INCLUDE_DIR - Only if you want to use LuaJIT; directory where luajit.h is located LUA_LIBRARY - Only if you want to use LuaJIT; path to libluajit.a/libluajit.so MINGWM10_DLL - Only if compiling with MinGW; path to mingwm10.dll @@ -168,8 +172,8 @@ OPENAL_INCLUDE_DIR - Only if building with sound; directory where a OPENAL_LIBRARY - Only if building with sound; path to libopenal.a/libopenal.so/OpenAL32.lib OPENGLES2_INCLUDE_DIR - Only if building with GLES; directory that contains gl2.h OPENGLES2_LIBRARY - Only if building with GLES; path to libGLESv2.a/libGLESv2.so -SQLITE3_INCLUDE_DIR - Only if you want to use SQLite from your OS; directory that contains sqlite3.h -SQLITE3_LIBRARY - Only if you want to use the SQLite from your OS; path to libsqlite3.a/libsqlite3.so +SQLITE3_INCLUDE_DIR - Directory that contains sqlite3.h +SQLITE3_LIBRARY - Path to libsqlite3.a/libsqlite3.so/sqlite3.lib VORBISFILE_DLL - Only if building with sound on Windows; path to libvorbisfile-3.dll VORBISFILE_LIBRARY - Only if building with sound; path to libvorbisfile.a/libvorbisfile.so/libvorbisfile.dll.a VORBIS_DLL - Only if building with sound on Windows; path to libvorbis-0.dll @@ -178,8 +182,8 @@ VORBIS_LIBRARY - Only if building with sound; path to libvorbis XXF86VM_LIBRARY - Only on Linux; path to libXXf86vm.a/libXXf86vm.so ZLIB_DLL - Only on Windows; path to zlib1.dll ZLIBWAPI_DLL - Only on Windows; path to zlibwapi.dll -ZLIB_INCLUDE_DIR - directory where zlib.h is located -ZLIB_LIBRARY - path to libz.a/libz.so/zlibwapi.lib +ZLIB_INCLUDE_DIR - Directory that contains zlib.h +ZLIB_LIBRARY - Path to libz.a/libz.so/zlibwapi.lib Compiling on Windows: --------------------- @@ -314,4 +318,165 @@ exit /b 0 :fail popd echo Failed. -exit /b 1 \ No newline at end of file +exit /b 1 + +License of Minetest textures and sounds +--------------------------------------- + +This applies to textures and sounds contained in the main Minetest +distribution. + +Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) +http://creativecommons.org/licenses/by-sa/3.0/ + +Authors of media files +----------------------- +Everything not listed in here: +Copyright (C) 2010-2012 celeron55, Perttu Ahola + +BlockMen: + textures/base/pack/menuheader.png + +erlehmann: + misc/minetest-icon-24x24.png + misc/minetest-icon.ico + misc/minetest.svg + textures/base/pack/logo.png + +License of Minetest source code +------------------------------- + +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 3.0 of the License, or +(at your option) any later version. + +This program 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 Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Irrlicht +--------------- + +This program uses the Irrlicht Engine. http://irrlicht.sourceforge.net/ + + The Irrlicht Engine License + +Copyright © 2002-2005 Nikolaus Gebhardt + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute +it freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you + must not claim that you wrote the original software. If you use + this software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + 3. This notice may not be removed or altered from any source + distribution. + + +JThread +--------------- + +This program uses the JThread library. License for JThread follows: + +Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + +Lua +--------------- + +Lua is licensed under the terms of the MIT license reproduced below. +This means that Lua is free software and can be used for both academic +and commercial purposes at absolutely no cost. + +For details and rationale, see http://www.lua.org/license.html . + +Copyright (C) 1994-2008 Lua.org, PUC-Rio. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Fonts +--------------- + +DejaVu Sans Mono: + + Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. + Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below) + +Bitstream Vera Fonts Copyright: + + Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is + a trademark of Bitstream, Inc. + +Arev Fonts Copyright: + + Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. + +Liberation Fonts Copyright: + + Copyright (c) 2007 Red Hat, Inc. All rights reserved. LIBERATION is a trademark of Red Hat, Inc. + +DroidSansFallback: + + Copyright (C) 2008 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/doc/lua_api.txt b/doc/lua_api.txt index f8dc3187..5ad88b12 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1,4 +1,4 @@ -Minetest Lua Modding API Reference 0.4.12 +Minetest Lua Modding API Reference 0.4.13 ========================================= * More information at * Developer Wiki: @@ -64,6 +64,17 @@ e.g. The game directory can contain the file minetest.conf, which will be used to set default settings when running the particular game. +It can also contain a settingtypes.txt in the same format as the one in builtin. +This settingtypes.txt will be parsed by the menu and the settings will be displayed in the "Games" category in the settings tab. + +### Menu images + +Games can provide custom main menu images. They are put inside a `menu` directory inside the game directory. + +The images are named `$identifier.png`, where `$identifier` is one of `overlay,background,footer,header`. +If you want to specify multiple images for one identifier, add additional images named like `$identifier.$n.png`, with an ascending number $n starting with 1, +and a random image will be chosen from the provided ones. + Mod load path ------------- @@ -116,6 +127,7 @@ Mod directory structure | |-- depends.txt | |-- screenshot.png | |-- description.txt + | |-- settingtypes.txt | |-- init.lua | |-- models | |-- textures @@ -146,6 +158,10 @@ A screenshot shown in modmanager within mainmenu. ### `description.txt` A File containing description to be shown within mainmenu. +### `settingtypes.txt` +A file in the same format as the one in builtin. It will be parsed by the +settings menu and the settings will be displayed in the "Mods" category. + ### `init.lua` The main Lua script. Running this script should register everything it wants to register. Subsequent execution depends on minetest calling the @@ -384,13 +400,13 @@ Examples of sound parameter tables: { pos = {x=1,y=2,z=3}, gain = 1.0, -- default - max_hear_distance = 32, -- default + max_hear_distance = 32, -- default, uses an euclidean metric } -- Play connected to an object, looped { object = , gain = 1.0, -- default - max_hear_distance = 32, -- default + max_hear_distance = 32, -- default, uses an euclidean metric loop = true, -- only sounds connected to objects can be looped } @@ -529,6 +545,10 @@ node definition: 0 = y+ 1 = z+ 2 = z- 3 = x+ 4 = x- 5 = y- facedir's two less significant bits are rotation around the axis paramtype2 == "leveled" + paramtype2 == "degrotate" + ^ The rotation of this node is stored in param2. Plants are rotated this way. + Values range 0 - 179. The value stored in param2 is multiplied by two to + get the actual rotation of the node. collision_box = { type = "fixed", fixed = { @@ -705,24 +725,40 @@ a non-equal distribution of ore. ### `sheet` Creates a sheet of ore in a blob shape according to the 2D perlin noise -described by `noise_params`. The relative height of the sheet can be -controlled by the same perlin noise as well, by specifying a non-zero -`scale` parameter in `noise_params`. +described by `noise_params` and `noise_threshold`. This is essentially an +improved version of the so-called "stratus" ore seen in some unofficial mods. -**IMPORTANT**: The noise is not transformed by `offset` or `scale` when comparing -against the noise threshold, but scale is used to determine relative height. -The height of the blob is randomly scattered, with a maximum height of `clust_size`. +This sheet consists of vertical columns of uniform randomly distributed height, +varying between the inclusive range `column_height_min` and `column_height_max`. +If `column_height_min` is not specified, this parameter defaults to 1. +If `column_height_max` is not specified, this parameter defaults to `clust_size` +for reverse compatibility. New code should prefer `column_height_max`. -`clust_scarcity` and `clust_num_ores` are ignored. +The `column_midpoint_factor` parameter controls the position of the column at which +ore eminates from. If 1, columns grow upward. If 0, columns grow downward. If 0.5, +columns grow equally starting from each direction. `column_midpoint_factor` is a +decimal number ranging in value from 0 to 1. If this parameter is not specified, +the default is 0.5. + +The ore parameters `clust_scarcity` and `clust_num_ores` are ignored for this ore type. + +### `puff` +Creates a sheet of ore in a cloud-like puff shape. + +As with the `sheet` ore type, the size and shape of puffs are described by +`noise_params` and `noise_threshold` and are placed at random vertical positions +within the currently generated chunk. + +The vertical top and bottom displacement of each puff are determined by the noise +parameters `np_puff_top` and `np_puff_bottom`, respectively. -This is essentially an improved version of the so-called "stratus" ore seen in -some unofficial mods. ### `blob` Creates a deformed sphere of ore according to 3d perlin noise described by `noise_params`. The maximum size of the blob is `clust_size`, and `clust_scarcity` has the same meaning as with the `scatter` type. -### `vein + +### `vein` Creates veins of ore varying in density by according to the intersection of two instances of 3d perlin noise with diffferent seeds, both described by `noise_params`. `random_factor` varies the influence random chance has on @@ -757,19 +793,28 @@ Also produce this same ore between the height range of `-y_max` and `-y_min`. Useful for having ore in sky realms without having to duplicate ore entries. +### `puff_cliffs` +If set, puff ore generation will not taper down large differences in displacement +when approaching the edge of a puff. This flag has no effect for ore types other +than `puff`. + +### `puff_additive_composition` +By default, when noise described by `np_puff_top` or `np_puff_bottom` results in a +negative displacement, the sub-column at that point is not generated. With this +attribute set, puff ore generation will instead generate the absolute difference in +noise displacement values. This flag has no effect for ore types other than `puff`. + Decoration types ---------------- The varying types of decorations that can be placed. -The default value is `simple`, and is currently the only type supported. - ### `simple` Creates a 1 times `H` times 1 column of a specified node (or a random node from a list, if a decoration list is specified). Can specify a certain node it must spawn next to, such as water or lava, for example. Can also generate a decoration of random height between a specified lower and upper bound. This type of decoration is intended for placement of grass, flowers, cacti, -papyri, and so on. +papyri, waterlilies and so on. ### `schematic` Copies a box of `MapNodes` from a specified schematic file (or raw description). @@ -808,8 +853,8 @@ Schematic attributes -------------------- See section "Flag Specifier Format". -Currently supported flags: `place_center_x`, `place_center_y`, - `place_center_z`, `force_placement`. +Currently supported flags: `place_center_x`, `place_center_y`, `place_center_z`, + `force_placement`. * `place_center_x`: Placement of this decoration is centered along the X axis. * `place_center_y`: Placement of this decoration is centered along the Y axis. @@ -1340,6 +1385,17 @@ examples. #### `list[;;,;,;]` * Show an inventory list +#### `listring[;]` +* Allows to create a ring of inventory lists +* Shift-clicking on items in one element of the ring +* will send them to the next inventory list inside the ring +* The first occurrence of an element inside the ring will +* determine the inventory where items will be sent to + +#### `listring[]` +* Shorthand for doing `listring[;]` +* for the last two inventory lists added by list[...] + #### `listcolors[;]` * Sets background color of slots as `ColorString` * Sets background color of slots on mouse hovering @@ -1617,7 +1673,7 @@ numerical form, the raw integer value of an ARGB8 quad: or string form, a ColorString (defined above): `colorspec = "green"` -Vector helpers +Spatial Vectors -------------- * `vector.new([x[, y, z]])`: returns a vector. @@ -1635,8 +1691,8 @@ For the following functions `x` can be either a vector or a number: * `vector.add(v, x)`: returns a vector * `vector.subtract(v, x)`: returns a vector -* `vector.multiply(v, x)`: returns a vector -* `vector.divide(v, x)`: returns a vector +* `vector.multiply(v, x)`: returns a scaled vector or Schur product +* `vector.divide(v, x)`: returns a scaled vector or Schur quotient Helper functions ----------------- @@ -1661,6 +1717,8 @@ Helper functions * Convert position to a printable string * `minetest.string_to_pos(string)`: returns a position * Same but in reverse. Returns `nil` if the string can't be parsed to a position. +* `minetest.string_to_area("(X1, Y1, Z1) (X2, Y2, Z2)")`: returns two positions + * Converts a string representing an area box into two positions * `minetest.formspec_escape(string)`: returns a string * escapes the characters "[", "]", "\", "," and ";", which can not be used in formspecs * `minetest.is_yes(arg)` @@ -1700,7 +1758,7 @@ Helper functions max_jitter = 0.5, -- maximum packet time jitter avg_jitter = 0.03, -- average packet time jitter connection_uptime = 200, -- seconds since client connected - + -- following information is available on debug build only!!! -- DO NOT USE IN MODS --ser_vers = 26, -- serialization version used by client @@ -1721,11 +1779,11 @@ Helper functions * false: return only file names. ### Logging -* `minetest.debug(line)` - * Always printed to `stderr` and logfile (`print()` is redirected here) -* `minetest.log(line)` -* `minetest.log(loglevel, line)` - * `loglevel` is one of `"error"`, `"action"`, `"info"`, `"verbose"` +* `minetest.debug(...)` + * Equivalent to `minetest.log(table.concat({...}, "\t"))` +* `minetest.log([level,] text)` + * `level` is one of `"none"`, `"error"`, `"warning"`, `"action"`, + `"info"`, or `"verbose"`. Default is `"none"`. ### Registration functions Call these functions only at load time! @@ -1785,6 +1843,13 @@ Call these functions only at load time! the puncher to the punched. * `damage` - number that represents the damage calculated by the engine * should return `true` to prevent the default damage mechanism +* `minetest.register_on_player_hpchange(func(player, hp_change), modifier)` + * Called when the player gets damaged or healed + * `player`: ObjectRef of the player + * `hp_change`: the amount of change. Negative when it is damage. + * `modifier`: when true, the function should return the actual hp_change. + Note: modifiers only get a temporary hp_change that can be modified by later modifiers. + modifiers can return true as a second argument to stop the execution of further functions. * `minetest.register_on_respawnplayer(func(ObjectRef))` * Called when player is to be respawned * Called _before_ repositioning of player occurs @@ -1806,6 +1871,7 @@ Call these functions only at load time! * `dug_too_fast` * `minetest.register_on_chat_message(func(name, message))` * Called always when a player says something + * Return `true` to mark the message as handled, which means that it will not be sent to other players * `minetest.register_on_player_receive_fields(func(player, formname, fields))` * Called when a button is pressed in player's inventory form * Newest functions are called first @@ -1863,8 +1929,11 @@ Call these functions only at load time! * `minetest.set_player_privs(name, {priv1=true,...})` * `minetest.get_player_privs(name) -> {priv1=true,...}` * `minetest.auth_reload()` -* `minetest.check_player_privs(name, {priv1=true,...})`: returns `bool, missing_privs` - * A quickhand for checking privileges +* `minetest.check_player_privs(player_or_name, ...)`: returns `bool, missing_privs` + * A quickhand for checking privileges. + * `player_or_name`: Either a Player object or the name of a player. + * `...` is either a list of strings, e.g. `"priva", "privb"` or + a table, e.g. `{ priva = true, privb = true }`. * `minetest.get_player_ip(name)`: returns an IP address string `minetest.set_player_password`, `minetest_set_player_privs`, `minetest_get_player_privs` @@ -1886,9 +1955,13 @@ and `minetest.auth_reload` call the authetification handler. * Returns `{name="ignore", ...}` for unloaded area * `minetest.get_node_or_nil(pos)` * Returns `nil` for unloaded area -* `minetest.get_node_light(pos, timeofday)` returns a number between `0` and `15` or `nil` +* `minetest.get_node_light(pos, timeofday)` + * Gets the light value at the given position. Note that the light value + "inside" the node at the given position is returned, so you usually want + to get the light value of a neighbor. + * `pos`: The position where to measure the light. * `timeofday`: `nil` for current time, `0` for night, `0.5` for day - + * Returns a number between `0` and `15` or `nil` * `minetest.place_node(pos, node)` * Place node with the same effects that a player would cause * `minetest.dig_node(pos)` @@ -1910,13 +1983,16 @@ and `minetest.auth_reload` call the authetification handler. * Returns `ObjectRef`, or `nil` if failed * `minetest.get_player_by_name(name)`: Get an `ObjectRef` to a player * `minetest.get_objects_inside_radius(pos, radius)` + * `radius`: using an euclidean metric * `minetest.set_timeofday(val)` * `val` is between `0` and `1`; `0` for midnight, `0.5` for midday * `minetest.get_timeofday()` * `minetest.get_gametime()`: returns the time, in seconds, since the world was created * `minetest.find_node_near(pos, radius, nodenames)`: returns pos or `nil` + * `radius`: using a maximum metric * `nodenames`: e.g. `{"ignore", "group:tree"}` or `"default:dirt"` * `minetest.find_nodes_in_area(minp, maxp, nodenames)`: returns a list of positions + * returns as second value a table with the count of the individual nodes found * `nodenames`: e.g. `{"ignore", "group:tree"}` or `"default:dirt"` * `minetest.find_nodes_in_area_under_air(minp, maxp, nodenames)`: returns a list of positions * returned positions are nodes with a node air above @@ -1935,6 +2011,9 @@ and `minetest.auth_reload` call the authetification handler. * `get_gen_notify()`: returns a flagstring and a table with the deco_ids * `minetest.get_mapgen_object(objectname)` * Return requested mapgen object if available (see "Mapgen objects") +* `minetest.get_biome_id(biome_name)` + * Returns the biome id, as used in the biomemap Mapgen object, for a + given biome_name string. * `minetest.get_mapgen_params()` Returns mapgen parameters, a table containing `mgname`, `seed`, `chunksize`, `water_level`, and `flags`. * `minetest.set_mapgen_params(MapgenParams)` @@ -1960,6 +2039,9 @@ and `minetest.auth_reload` call the authetification handler. * `pos1` and `pos2` are optional and default to mapchunk minp and maxp. * `minetest.clear_objects()` * clear all objects in the environments +* `minetest.emerge_area(pos1, pos2)` + * queues all mapblocks in the area from pos1 to pos2, inclusive, for emerge + * i.e. asynchronously loads blocks from disk, or if inexistent, generates them * `minetest.delete_area(pos1, pos2)` * delete all mapblocks in the area from pos1 to pos2, inclusive * `minetest.line_of_sight(pos1, pos2, stepsize)`: returns `boolean, pos` @@ -1974,7 +2056,7 @@ and `minetest.auth_reload` call the authetification handler. * returns a table of 3D points representing a path from `pos1` to `pos2` or `nil` * `pos1`: start position * `pos2`: end position - * `searchdistance`: number of blocks to search in each direction + * `searchdistance`: number of blocks to search in each direction using a maximum metric * `max_jump`: maximum height difference to consider walkable * `max_drop`: maximum height difference to consider droppable * `algorithm`: One of `"A*_noprefetch"` (default), `"A*"`, `"Dijkstra"` @@ -2058,6 +2140,8 @@ and `minetest.auth_reload` call the authetification handler. `{ stack1, stack2, stack3, stack4, stack 5, stack 6, stack 7, stack 8, stack 9 }` * `output.item` = `ItemStack`, if unsuccessful: empty `ItemStack` * `output.time` = a number, if unsuccessful: `0` + * `output.replacements` = list of `ItemStack`s that couldn't be placed in + `decremented_input.items` * `decremented_input` = like `input` * `minetest.get_craft_recipe(output)`: returns input * returns last registered recipe for output item (node) @@ -2143,7 +2227,8 @@ These functions return the leftover itemstack. * Optional: Variable number of arguments that are passed to `func` ### Server -* `minetest.request_shutdown()`: request for server shutdown +* `minetest.request_shutdown([message],[reconnect])`: request for server shutdown. Will display `message` to clients, + and `reconnect` == true displays a reconnect button. * `minetest.get_server_status()`: returns server status string ### Bans @@ -2160,7 +2245,7 @@ These functions return the leftover itemstack. * `minetest.add_particlespawner(particlespawner definition)` * Add a `ParticleSpawner`, an object that spawns an amount of particles over `time` seconds - * Returns an `id` + * Returns an `id`, and -1 if adding didn't succeed * `Deprecated: minetest.add_particlespawner(amount, time, minpos, maxpos, minvel, maxvel, @@ -2268,6 +2353,9 @@ These functions return the leftover itemstack. * currently supported. * `...` indicates method-specific arguments. Currently, no methods use this. * `minetest.is_protected(pos, name)`: returns boolean + * Returns true, if player `name` shouldn't be abled to dig at `pos` or do other + actions, defineable by mods, due to some mod-defined ownership-like concept. + Returns false or nil, if the player is allowed to do such actions. * This function should be overridden by protection mods and should be used to check if a player can interact at a position. * This function should call the old version of itself if the position is not @@ -2368,7 +2456,7 @@ Can be gotten via `minetest.get_meta(pos)`. * `from_table(nil or {})` * See "Node Metadata" -### `NoteTimerRef` +### `NodeTimerRef` Node Timers: a high resolution persistent per-node timer. Can be gotten via `minetest.get_node_timer(pos)`. @@ -2415,8 +2503,8 @@ This is basically a reference to a C++ `ServerActiveObject` * `set_wielded_item(item)`: replaces the wielded item, returns `true` if successful * `set_armor_groups({group1=rating, group2=rating, ...})` * `get_armor_groups()`: returns a table with the armor group ratings -* `set_animation({x=1,y=1}, frame_speed=15, frame_blend=0)` -* `get_animation()`: returns range, frame_speed and frame_blend +* `set_animation({x=1,y=1}, frame_speed=15, frame_blend=0, frame_loop=true)` +* `get_animation()`: returns range, frame_speed, frame_blend and frame_loop * `set_attach(parent, bone, position, rotation)` * `bone`: string * `position`: `{x=num, y=num, z=num}` (relative) @@ -2449,6 +2537,7 @@ This is basically a reference to a C++ `ServerActiveObject` ##### Player-only (no-op for other objects) * `get_player_name()`: returns `""` if is not a player +* `get_player_velocity()`: returns `nil` if is not a player otherwise a table {x, y, z} representing the player's instantaneous velocity in nodes/s * `get_look_dir()`: get camera direction as a unit vector * `get_look_pitch()`: pitch in radians * `get_look_yaw()`: yaw in radians (wraps around pretty randomly as of now) @@ -2483,11 +2572,13 @@ This is basically a reference to a C++ `ServerActiveObject` * element `stat` values: `position`, `name`, `scale`, `text`, `number`, `item`, `dir` * `hud_get(id)`: gets the HUD element definition structure of the specified ID * `hud_set_flags(flags)`: sets specified HUD flags to `true`/`false` - * `flags`: (is visible) `hotbar`, `healthbar`, `crosshair`, `wielditem` + * `flags`: (is visible) `hotbar`, `healthbar`, `crosshair`, `wielditem`, `minimap` * pass a table containing a `true`/`false` value of each flag to be set or unset * if a flag equals `nil`, the flag is not modified + * note that setting `minimap` modifies the client's permission to view the minimap - + * the client may locally elect to not view the minimap * `hud_get_flags()`: returns a table containing status of hud flags - * returns `{ hotbar=true, healthbar=true, crosshair=true, wielditem=true, breathbar=true }` + * returns `{ hotbar=true, healthbar=true, crosshair=true, wielditem=true, breathbar=true, minimap=true }` * `hud_set_hotbar_itemcount(count)`: sets number of items in builtin hotbar * `count`: number of items, must be between `1` and `23` * `hud_get_hotbar_itemcount`: returns number of visible items @@ -2569,6 +2660,28 @@ An `InvRef` is a reference to an inventory. * `get_location()`: returns a location compatible to `minetest.get_inventory(location)` * returns `{type="undefined"}` in case location is not known +### `AreaStore` +A fast access data structure to store areas, and find areas near a given position or area. +Every area has a `data` string attribute to store additional information. +You can create an empty `AreaStore` by calling `AreaStore()`, or `AreaStore(type_name)`. +If you chose the parameter-less constructor, a fast implementation will be automatically chosen for you. + +#### Methods +* `get_area(id, include_borders, include_data)`: returns the area with the id `id`. (optional) Boolean values `include_borders` and `include_data` control what's copied. +* `get_areas_for_pos(pos, include_borders, include_data)`: returns all areas that contain the position `pos`. (optional) Boolean values `include_borders` and `include_data` control what's copied. +* `get_areas_in_area(edge1, edge2, accept_overlap, include_borders, include_data)`: returns all areas that contain all nodes inside the area specified by `edge1` and `edge2` (inclusive). If `accept_overlap` is true, also areas are returned that have nodes in common with the specified area. (optional) Boolean values `include_borders` and `include_data` control what's copied. +* `insert_area(edge1, edge2, data)`: inserts an area into the store. Returns the id if successful, nil otherwise. The (inclusive) positions `edge1` and `edge2` describe the area, `data` +is a string stored with the area. +* `reserve(count)`: reserves resources for at most `count` many contained areas. Only needed for efficiency, and only some implementations profit. +* `remove_area(id)`: removes the area with the given id from the store, returns success. +* `set_cache_params(params)`: sets params for the included prefiltering cache. Calling invalidates the cache, so that its elements have to be newly generated. + * `params`: + { + enabled = boolean, -- whether to enable, default true + block_radius = number, -- the radius (in nodes) of the areas the cache generates prefiltered lists for, minimum 16, default 64 + limit = number, -- the cache's size, minimum 20, default 1000 + } + ### `ItemStack` An `ItemStack` is a stack of items. @@ -2932,6 +3045,7 @@ Definition tables stepheight = 0, automatic_face_movement_dir = 0.0, -- ^ automatically set yaw to movement direction; offset in degrees; false to disable + backface_culling = true, -- false to disable backface_culling for model } ### Entity definition (`register_entity`) @@ -2958,10 +3072,14 @@ Definition tables { -- In the following two fields, also group:groupname will work. nodenames = {"default:lava_source"}, - neighbors = {"default:water_source", "default:water_flowing"}, -- (any of these) - -- ^ If left out or empty, any neighbor will do - interval = 1.0, -- (operation interval) - chance = 1, -- (chance of trigger is 1.0/this) + neighbors = {"default:water_source", "default:water_flowing"}, -- Any of these --[[ + ^ If left out or empty, any neighbor will do ]] + interval = 1.0, -- Operation interval in seconds + chance = 1, -- Chance of trigger per-node per-interval is 1.0 / this + catch_up = true, -- If true, catch-up behaviour is enabled --[[ + ^ The chance value is temporarily reduced when returning to + an area to simulate time lost by the area being unattended. + ^ Note chance value can often be reduced to 1 ]] action = func(pos, node, active_object_count, active_object_count_wider), } @@ -3037,8 +3155,13 @@ Definition tables ### Tile definition * `"image.png"` * `{name="image.png", animation={Tile Animation definition}}` -* `{name="image.png", backface_culling=bool}` - * backface culling only supported in special tiles +* `{name="image.png", backface_culling=bool, tileable_vertical=bool, + tileable_horizontal=bool}` + * backface culling only supported in special tiles. + * tileable flags are info for shaders, how they should treat texture + when displacement mapping is used + Directions are from the point of view of the tile texture, + not the node it's on * deprecated, yet still supported field names: * `image` (name) @@ -3113,14 +3236,17 @@ Definition tables }, on_construct = func(pos), --[[ - ^ Node constructor; always called after adding node + ^ Node constructor; called after adding node ^ Can set up metadata and stuff like that + ^ Not called for bulk node placement (i.e. schematics and VoxelManip) ^ default: nil ]] on_destruct = func(pos), --[[ - ^ Node destructor; always called before removing node + ^ Node destructor; called before removing node + ^ Not called for bulk node placement (i.e. schematics and VoxelManip) ^ default: nil ]] after_destruct = func(pos, oldnode), --[[ - ^ Node destructor; always called after removing node + ^ Node destructor; called after removing node + ^ Not called for bulk node placement (i.e. schematics and VoxelManip) ^ default: nil ]] after_place_node = func(pos, placer, itemstack, pointed_thing) --[[ @@ -3298,6 +3424,11 @@ Definition tables -- ^ Minimum and maximum `y` positions these decorations can be generated at. -- ^ This parameter refers to the `y` position of the decoration base, so -- the actual maximum height would be `height_max + size.Y`. + flags = "liquid_surface", + -- ^ Flags for all decoration types. + -- ^ "liquid_surface": Instead of placement on the highest solid surface + -- ^ in a mapchunk column, placement is on the highest liquid surface. + -- ^ Placement is disabled if solid nodes are found above the liquid surface. ----- Simple-type parameters decoration = "default:grass", @@ -3310,7 +3441,9 @@ Definition tables -- ^ Number of nodes the decoration can be at maximum. -- ^ If absent, the parameter 'height' is used as a constant. spawn_by = "default:water", - -- ^ Node that the decoration only spawns next to, in a 1-node square radius. + -- ^ Node that the decoration only spawns next to. + -- ^ The neighbours checked are the 8 nodes horizontally surrounding the lowest node of the + -- ^ decoration, and the 8 nodes horizontally surrounding the ground node below the decoration. num_spawn_by = 1, -- ^ Number of spawn_by nodes that must be surrounding the decoration position to occur. -- ^ If absent or -1, decorations occur next to any nodes. diff --git a/doc/menu_lua_api.txt b/doc/menu_lua_api.txt index 76c329de..c995b4c5 100644 --- a/doc/menu_lua_api.txt +++ b/doc/menu_lua_api.txt @@ -1,4 +1,4 @@ -Minetest Lua Mainmenu API Reference 0.4.12 +Minetest Lua Mainmenu API Reference 0.4.13 ======================================== Introduction @@ -141,8 +141,8 @@ core.get_game(index) addon_mods_paths = {[1] = ,}, } core.get_games() -> table of all games in upper format (possible in async calls) -core.get_mapgen_names() -> table of all map generator algorithms registered in - the core (possible in async calls) +core.get_mapgen_names([include_hidden=false]) -> table of map generator algorithms + registered in the core (possible in async calls) Favorites: core.get_favorites(location) -> list of favorites (possible in async calls) @@ -191,6 +191,8 @@ core.create_world(worldname, gameid) core.delete_world(index) Helpers: +core.get_us_time() +^ returns time with microsecond precision core.gettext(string) -> string ^ look up the translation of a string in the gettext message catalog fgettext_ne(string, ...) diff --git a/doc/mapformat.txt b/doc/world_format.txt similarity index 88% rename from doc/mapformat.txt rename to doc/world_format.txt index 2b049adc..a6255053 100644 --- a/doc/mapformat.txt +++ b/doc/world_format.txt @@ -41,13 +41,23 @@ auth.txt --------- Contains authentication data, player per line. :: -Format of password hash is SHA1'd, in the base64 encoding. + +Legacy format (until 0.4.12) of password hash is SHA1'd, +in the base64 encoding. + +Format (since 0.4.13) of password hash is #1##, with the +parts inside <> encoded in the base64 encoding. + is an RFC 2945 compatible SRP verifier, +of the given salt, password, and the player's name lowercased, +using the 2048-bit group specified in RFC 5054 and the SHA-256 hash function. Example lines: - Player "celeron55", no password, privileges "interact" and "shout": celeron55::interact,shout -- Player "Foo", password "bar", privilege "shout": +- Player "Foo", password "bar", privilege "shout", with a legacy password hash: foo:iEPX+SQWIR3p67lj/0zigSWTKHg:shout +- Player "Foo", password "bar", privilege "shout", with a 0.4.13 pw hash: + foo:#1#hPpy4O3IAn1hsNK00A6wNw#Kpu6rj7McsrPCt4euTb5RA5ltF7wdcWGoYMcRngwDi11cZhPuuR9i5Bo7o6A877TgcEwoc//HNrj9EjR/CGjdyTFmNhiermZOADvd8eu32FYK1kf7RMC0rXWxCenYuOQCG4WF9mMGiyTPxC63VAjAMuc1nCZzmy6D9zt0SIKxOmteI75pAEAIee2hx4OkSXRIiU4Zrxo1Xf7QFxkMY4x77vgaPcvfmuzom0y/fU1EdSnZeopGPvzMpFx80ODFx1P34R52nmVl0W8h4GNo0k8ZiWtRCdrJxs8xIg7z5P1h3Th/BJ0lwexpdK8sQZWng8xaO5ElthNuhO8UQx1l6FgEA:shout - Player "bar", no password, no privileges: bar:: @@ -204,14 +214,14 @@ algorithm, defined here in Python: def getBlockAsInteger(p): return int64(p[2]*16777216 + p[1]*4096 + p[0]) - + def int64(u): while u >= 2**63: u -= 2**64 while u <= -2**63: u += 2**64 return u - + It can be converted the other way by using this code: def getIntegerAsBlock(i): @@ -221,7 +231,7 @@ It can be converted the other way by using this code: i = int((i - y) / 4096) z = unsignedToSigned(i % 4096, 2048) return x,y,z - + def unsignedToSigned(i, max_positive): if i < max_positive: return i @@ -241,7 +251,7 @@ NOTE: Zlib data is in such a format that Python's zlib at least can directly decompress. u8 version -- map format version number, this one is version 22 +- map format version number, see serialisation.h for the latest number u8 flags - Flag bitmasks: @@ -287,13 +297,26 @@ if content_width == 2: zlib-compressed node metadata list - content: +if map format version <= 22: u16 version (=1) u16 count of metadata foreach count: u16 position (p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X) u16 type_id u16 content_size - u8[content_size] (content of metadata) + u8[content_size] content of metadata. Format depends on type_id, see below. +if map format version >= 23: + u8 version (=1) -- Note the type is u8, while for map format version <= 22 it's u16 + u16 count of metadata + foreach count: + u16 position (p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X) + u32 num_vars + foreach num_vars: + u16 key_len + u8[key_len] key + u32 val_len + u8[val_len] value + serialized inventory - Node timers if map format version == 23: @@ -308,6 +331,8 @@ if map format version == 24: (NOTE: Not released as stable) u16 timer position (z*16*16 + y*16 + x) s32 timeout*1000 s32 elapsed*1000 +if map format version >= 25: + -- Nothing right here, node timers are serialized later u8 static object version: - Always 0 @@ -367,8 +392,9 @@ The name-id-mapping -------------------- The mapping maps node content ids to node names. -Node metadata format ---------------------- +Node metadata format for map format versions <= 22 +--------------------------------------------------- +The node metadata are serialized depending on the type_id field. 1: Generic metadata serialized inventory diff --git a/misc/minetest.desktop b/misc/minetest.desktop index 8f8c7b01..5a88bfbe 100644 --- a/misc/minetest.desktop +++ b/misc/minetest.desktop @@ -5,6 +5,7 @@ Comment=Multiplayer infinite-world block sandbox Comment[de]=Mehrspieler-Sandkastenspiel mit unendlichen Blockwelten Comment[es]=Juego sandbox multijugador con mundos infinitos Comment[fr]=Jeu multijoueurs de type bac à sable avec des mondes infinis +Comment[ja]=マルチプレイに対応した、無限の世界のブロック型サンドボックスゲームです Comment[ru]=Игра-песочница с безграничным миром, состоящим из блоков Comment[tr]=Tek-Çok oyuncuyla küplerden sonsuz dünyalar inşa et Exec=MultiCraft @@ -13,5 +14,4 @@ Terminal=false Type=Application Categories=Game; StartupNotify=false -Keywords=sandbox;world;mining;crafting;blocks;nodes;multiplayer;roleplaying; - +Keywords=sandbox;world;mining;crafting;blocks;nodes;multiplayer;roleplaying; \ No newline at end of file diff --git a/misc/minetest.svg b/misc/minetest.svg new file mode 100644 index 00000000..fe036c3d --- /dev/null +++ b/misc/minetest.svg @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/multicraft.conf.example b/multicraft.conf.example index 6ed434bc..3850cdef 100644 --- a/multicraft.conf.example +++ b/multicraft.conf.example @@ -1,4 +1,9 @@ -# This file is read by default from: +# This file contains a list of all available settings and their default value for multicraft.conf + +# By default, all the settings are commented and not functional. +# Uncomment settings by removing the preceding #. + +# multicraft.conf is read by default from: # ../multicraft.conf # ../../multicraft.conf # Any other path can be chosen by passing the path as a parameter @@ -16,201 +21,318 @@ # Note: Some of the settings are implemented in Lua. # -# Client and server +# Client # -# Name of player, on a server this is the main admin -#name = +## Controls -# -# Client stuff -# +# If enabled, you can place blocks at the position (feet + eye level) where you stand. +# This is helpful when working with nodeboxes in small areas. +# type: bool +# enable_build_where_you_stand = false -# Port to connect to (UDP) -#remote_port = -# Key mappings. +# Player is able to fly without being affected by gravity. +# This requires the "fly" privilege on the server. +# type: bool +# free_move = false + +# Fast movement (via use key). +# This requires the "fast" privilege on the server. +# type: bool +# fast_move = false + +# If enabled together with fly mode, player is able to fly through solid nodes. +# This requires the "noclip" privilege on the server. +# type: bool +# noclip = false + +# Smooths camera when moving and looking around. +# Useful for recording videos. +# type: bool +# cinematic = false + +# Smooths rotation of camera. 0 to disable. +# type: float min: 0 max: 0.99 +# camera_smoothing = 0.0 + +# Smooths rotation of camera in cinematic mode. 0 to disable. +# type: float min: 0 max: 0.99 +# cinematic_camera_smoothing = 0.7 + +# Invert vertical mouse movement. +# type: bool +# invert_mouse = false + +# Mouse sensitivity multiplier. +# type: float +# mouse_sensitivity = 0.2 + +# If enabled, "use" key instead of "sneak" key is used for climbing down and descending. +# type: bool +# aux1_descends = false + +# Double-tapping the jump key toggles fly mode. +# type: bool +# doubletap_jump = false + +# If disabled "use" key is used to fly fast if both fly and fast mode are enabled. +# type: bool +# always_fly_fast = true + +# The time in seconds it takes between repeated right clicks when holding the right mouse button. +# type: float +# repeat_rightclick_time = 0.25 + +# Enable random user input (only used for testing). +# type: bool +# random_input = false + +# Continuous forward movement (only used for testing). +# type: bool +# continuous_forward = false + +# Key for moving the player forward. # See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 -#keymap_forward = KEY_KEY_W -#keymap_backward = KEY_KEY_S -#keymap_left = KEY_KEY_A -#keymap_right = KEY_KEY_D -#keymap_jump = KEY_SPACE -#keymap_sneak = KEY_LSHIFT -#keymap_inventory = KEY_KEY_I -# Go down ladder / go down in fly mode / go fast in fast mode -#keymap_special1 = KEY_KEY_E -#keymap_chat = KEY_KEY_T -#keymap_cmd = / -#keyman_console = KEY_F10 -#keymap_rangeselect = KEY_KEY_R -#keymap_freemove = KEY_KEY_K -#keymap_fastmove = KEY_KEY_J -#keymap_cinematic = KEY_F8 -#keymap_screenshot = KEY_F12 -# If true, keymap_special1 instead of keymap_sneak is used for climbing down and descending -#aux1_descends = false -# Double-tapping the jump key toggles fly mode -#doubletap_jump = false -# If false aux1 is used to fly fast -#always_fly_fast = true -# Some (temporary) keys for debugging -#keymap_print_debug_stacks = KEY_KEY_P -#keymap_quicktune_prev = KEY_HOME -#keymap_quicktune_next = KEY_END -#keymap_quicktune_dec = KEY_NEXT -#keymap_quicktune_inc = KEY_PRIOR +# type: key +# keymap_forward = KEY_KEY_W + +# Key for moving the player backward. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_backward = KEY_KEY_S + +# Key for moving the player left. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_left = KEY_KEY_A + +# Key for moving the player right. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_right = KEY_KEY_D + +# Key for jumping. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_jump = KEY_SPACE + +# Key for sneaking. +# Also used for climbing down and descending in water if aux1_descends is disabled. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_sneak = KEY_LSHIFT + +# Key for opening the inventory. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_inventory = KEY_KEY_I + +# Key for moving fast in fast mode. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_special1 = KEY_KEY_E + +# Key for opening the chat window. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_chat = KEY_KEY_T + +# Key for opening the chat window to type commands. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_cmd = / + +# Key for opening the chat console. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keyman_console = KEY_F10 + +# Key for toggling unlimited view range. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_rangeselect = KEY_KEY_R + +# Key for toggling flying. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_freemove = KEY_KEY_K + +# Key for toggling fast mode. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_fastmove = KEY_KEY_J + +# Key for toggling noclip mode. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_noclip = KEY_KEY_H + +# Key for toggling cinematic mode. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_cinematic = KEY_F8 + +# Key for toggling display of minimap. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_minimap = KEY_F9 + +# Key for taking screenshots. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_screenshot = KEY_F12 + +# Key for dropping the currently selected item. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_drop = KEY_KEY_Q + +# Key for toggling the display of the HUD. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_toggle_hud = KEY_F1 + +# Key for toggling the display of the chat. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_toggle_chat = KEY_F2 + +# Key for toggling the display of the fog. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_toggle_force_fog_off = KEY_F3 + +# Key for toggling the camrea update. Only used for development +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_toggle_update_camera = + +# Key for toggling the display of debug info. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_toggle_debug = KEY_F5 + +# Key for toggling the display of the profiler. Used for development. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_toggle_profiler = KEY_F6 + +# Key for switching between first- and third-person camera. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_camera_mode = KEY_F7 + +# Key for increasing the viewing range. Modifies the minimum viewing range. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_increase_viewing_range_min = + + +# Key for decreasing the viewing range. Modifies the minimum viewing range. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_decrease_viewing_range_min = - + +# Key for printing debug stacks. Used for development. +# See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3 +# type: key +# keymap_print_debug_stacks = KEY_KEY_P + +## Network + +# Address to connect to. +# Leave this blank to start a local server. +# Note that the address field in the main menu overrides this setting. +# type: string +# address = + +# Port to connect to (UDP). +# Note that the port field in the main menu overrides this setting. +# type: int min: 1 max: 65535 +# remote_port = 30000 + +# Save the map received by the client on disk. +# type: bool +# enable_local_map_saving = false + +# Enable usage of remote media server (if provided by server). +# Remote servers offer a significantly faster way to download media (e.g. textures) +# when connecting to the server. +# type: bool +# enable_remote_media_server = true + +# URL to the server list displayed in the Multiplayer Tab. +# type: string +# serverlist_url = servers.multicraft.net + +# File in client/serverlist/ that contains your favorite servers displayed in the Multiplayer Tab. +# type: string +# serverlist_file = favoriteservers.txt + +## Graphics + +### In-Game + +#### Basic + +# Whether to fog out the end of the visible area. +# type: bool +# enable_fog = true + +# Enable a bit lower water surface, so it doesn't "fill" the node completely. +# Note that this is not quite optimized and that smooth lighting on the +# water surface doesn't work with this. +# type: bool +# new_style_water = false + +# Leaves style: +# - Fancy: all faces visible +# - Simple: only outer faces, if defined special_tiles are used +# - Opaque: disable transparency +# type: enum values: fancy, simple, opaque +# leaves_style = fancy + +# Connects glass if supported by node. +# type: bool +# connected_glass = false -# If set to true, you can place blocks at the position (feet + eye level) where you stand. -# This is helpful when working with nodeboxes. -#enable_build_where_you_stand = false -# Minimum FPS. -# The amount of rendered stuff is dynamically set according to this. -#wanted_fps = 30 -# If FPS would go higher than this, limit it by sleeping -# to not waste CPU power for no benefit. -#fps_max = 60 -# Maximum FPS when game is paused -#pause_fps_max = 20 -# The allowed adjustment range for the automatic rendering range adjustment -#viewing_range_nodes_max = 160 -#viewing_range_nodes_min = 35 -# Initial window size -#screenW = 800 -#screenH = 600 -#fullscreen = false -#fullscreen_bpp = 24 -# Experimental option, might cause visible spaces between blocks -# when set to higher number than 0. -#fsaa = 0 -#vsync = false -# Field of view in degrees -#fov = 72 -# Address to connect to (#blank = start local server) -#address = -# Enable random user input, for testing -#random_input = false -# Timeout for client to remove unused map data from memory -#client_unload_unused_data_timeout = 600 -# Whether to fog out the end of the visible area -#enable_fog = true -# Whether to show the client debug info (has the same effect as hitting F5) -#show_debug = false -# Enable a bit lower water surface; disable for speed (not quite optimized) -#new_style_water = false -# Max liquids processed per step -#liquid_loop_max = 100000 -# The time (in seconds) that the liquids queue may grow beyond processing -# capacity until an attempt is made to decrease its size by dumping old queue -# items. A value of 0 disables the functionality. -#liquid_queue_purge_time = 0 -# Liquid update interval in seconds -#liquid_update = 1.0 -# Enable transparent leaf textures, disable for speed -#new_style_leaves = true -# Connects glass if supported by node -#connected_glass = false # Enable smooth lighting with simple ambient occlusion. # Disable for speed or for different looks. -#smooth_lighting = true -# Adjust the gamma encoding for the light tables. Valid values are in the range -# 1.0 to 3.0 (inclusive); lower numbers are brighter. This setting is for the -# client only and is ignored by the server -#display_gamma = 1.8 -# Path to texture directory. All textures are first searched from here. -#texture_path = -# Video back-end. -# Possible values: null, software, burningsvideo, direct3d8, direct3d9, opengl. -#video_driver = opengl -# Unobstructed movement without physics, downwards key is keymap_special1 -#free_move = false -# Continuous forward movement (for testing) -#continuous_forward = false -# Enable cinematic mode -#cinematic = false -# Camera smoothing - smooths rotation of camera. 0 is no smoothing. -# Must be equal to or greater than 0, and less than 1. -#camera_smoothing = 0.0 -# Camera smoothing when in cinematic mode -#cinematic_camera_smoothing = 0.7 -# Fast movement (keymap_special1) -#fast_move = false -# Invert mouse -#invert_mouse = false -# Enable/disable clouds -#enable_clouds = true -#cloud_height = 120 -# Radius of cloud area stated in number of 64 node cloud squares. -# Values larger than 26 will start to produce sharp cutoffs at cloud area corners. -#cloud_radius = 12 -#enable_3d_clouds = true -# Use a cloud animation for the main menu background -#menu_clouds = true -# Path for screenshots -#screenshot_path = -# Amount of view bobbing (0 = no view bobbing, 1.0 = normal, 2.0 = double) -#view_bobbing_amount = 1.0 -# Amount of fall bobbing (0 = no fall bobbing, 1.0 = normal, 2.0 = double) -#fall_bobbing_amount = 0.0 -# 3d support. -# Currently: -# "none" = no 3d output. -# "anaglyph" = cyan/magenta color 3d. -# "interlaced" = odd/even line based polarisation screen support. -# "topbottom" = split screen top/bottom. -# "sidebyside" = split screen side by side. -#3d_mode = none -#3d_parallax_strength = 0.025 -# In-game chat console background color (R,G,B) -#console_color = (0,0,0) -# In-game chat console background alpha (opaqueness, between 0 and 255) -#console_alpha = 200 -# Selection box border color (R,G,B) -#selectionbox_color = (0,0,0) -# Crosshair color (R,G,B) -#crosshair_color = (255,255,255) -# Cross alpha (opaqueness, between 0 and 255) -#crosshair_alpha = 255 -# Scale gui by a user specified value -#gui_scaling = 1.0 -# Use a nearest-neighbor-anti-alias filter to scale the GUI. -# This will smooth over some of the rough edges, and blend -# pixels when scaling down, at the cost of blurring some -# edge pixels when images are scaled by non-integer sizes. -#gui_scaling_filter = false -# When gui_scaling_filter is true, all GUI images need to be -# filtered in software, but some images are generated directly -# to hardware (e.g. render-to-texture for nodes in inventory). -# When gui_scaling_filter_txr2img is true, copy those images -# from hardware to software for scaling. When false, fall back -# to the old scaling method, for video drivers that don't -# propery support downloading textures back from hardware. -#gui_scaling_filter_txr2img = true -# Sensitivity multiplier -#mouse_sensitivity = 0.2 -# Sound settings -#enable_sound = true -#sound_volume = 0.7 -# Whether node texture animations should be desynchronized per mapblock -#desynchronize_mapblock_texture_animation = true -# Width of the selectionbox's lines (Between 1 and 5) -#selectionbox_width = 2 -# Maximum proportion of current window to be used for hotbar. -# Useful if there's something to be displayed right or left of hotbar. -#hud_hotbar_max_width = 1.0 -# Save the map received by the client on disk -#enable_local_map_saving = false -# Enable selection highlighting for nodes (disables selectionbox) -#enable_node_highlighting = false -# Texture filtering settings -#mip_map = false -#anisotropic_filter = false -#bilinear_filter = false -#trilinear_filter = false +# type: bool +# smooth_lighting = true + +# Clouds are a client side effect. +# type: bool +# enable_clouds = true + +# Use 3D cloud look instead of flat. +# type: bool +# enable_3d_clouds = true + +#### Filtering + +# Use mip mapping to scale textures. May slightly increase performance. +# type: bool +# mip_map = false + +# Use anisotropic filtering when viewing at textures from an angle. +# type: bool +# anisotropic_filter = false + +# Use bilinear filtering when scaling textures. +# type: bool +# bilinear_filter = false + +# Use trilinear filtering when scaling textures. +# type: bool +# trilinear_filter = false + # Filtered textures can blend RGB values with fully-transparent neighbors, # which PNG optimizers usually discard, sometimes resulting in a dark or # light edge to transparent textures. Apply this filter to clean that up # at texture load time. -#texture_clean_transparent = false +# type: bool +# texture_clean_transparent = false + # When using bilinear/trilinear/anisotropic filters, low-resolution textures # can be blurred, so automatically upscale them with nearest-neighbor # interpolation to preserve crisp pixels. This sets the minimum texture size @@ -218,355 +340,938 @@ # memory. Powers of 2 are recommended. Setting this higher than 1 may not # have a visible effect unless bilinear/trilinear/anisotropic filtering is # enabled. -#texture_min_size = 64 -# Set to true to pre-generate all item visuals -#preload_item_visuals = false -# Set to true to enable shaders. Disable them if video_driver = direct3d9/8. -#enable_shaders = true -# Set to true to enable textures bumpmapping. Requires shaders enabled. -#enable_bumpmapping = false -# Set to true enables parallax occlusion mapping. Requires shaders enabled. -#generate_normalmaps = false -# Set to true enables on the fly normalmap generation (Emboss effect). -# Requires bumpmapping enabled. -#normalmaps_strength = 0.6 -# Strength of generated normalmaps -#normalmaps_smooth = 1 -# Defines sampling step of texture (0 - 2). +# type: int +# texture_min_size = 64 + +# Pre-generate all item visuals used in the inventory. +# This increases startup time, but runs smoother in-game. +# The generated textures can easily exceed your VRAM, causing artifacts in the inventory. +# type: bool +# preload_item_visuals = false + +# Experimental option, might cause visible spaces between blocks +# when set to higher number than 0. +# type: enum values: 0, 1, 2, 4, 8, 16 +# fsaa = 0 + +#### Shaders + +# Shaders allow advanced visul effects and may increase performance on some video cards. +# Thy only work with the OpenGL video backend. +# type: bool +# enable_shaders = true + +##### Bumpmapping + +# Enables bumpmapping for textures. Normalmaps need to be supplied by the texture pack +# or need to be auto-generated. +# Requires shaders to be enabled. +# type: bool +# enable_bumpmapping = false + +# Enables on the fly normalmap generation (Emboss effect). +# Requires bumpmapping to be enabled. +# type: bool +# generate_normalmaps = false + +# Strength of generated normalmaps. +# type: float +# normalmaps_strength = 0.6 + +# Defines sampling step of texture. # A higher value results in smoother normal maps. -#enable_parallax_occlusion = false -# Scale of parallax occlusion effect -#parallax_occlusion_scale = 0.08 -# Bias of parallax occlusion effect, usually scale/2 -#parallax_occlusion_bias = 0.04 -# Set to true enables waving water. Requires shaders enabled. -#enable_waving_water = false -# Parameters for waving water: -#water_wave_height = 1.0 -#water_wave_length = 20.0 -#water_wave_speed = 5.0 -# Set to true enables waving leaves. Requires shaders enabled. -#enable_waving_leaves = false -# Set to true enables waving plants. Requires shaders enabled. -#enable_waving_plants = false -# Enables caching of facedir rotated meshes -#ambient_occlusion_gamma = 2.2 +# type: int min: 0 max: 2 +# normalmaps_smooth = 0 + +##### Parallax Occlusion + +# Enables parallax occlusion mapping. +# Requires shaders to be enabled. +# type: bool +# enable_parallax_occlusion = false + +# 0 = parallax occlusion with slope information (faster). +# 1 = relief mapping (slower, more accurate). +# type: int min: 0 max: 1 +# parallax_occlusion_mode = 1 + +# Strength of parallax. +# type: float +# 3d_parallax_strength = 0.025 + +# Number of parallax occlusion iterations. +# type: int +# parallax_occlusion_iterations = 4 + +# Overall scale of parallax occlusion effect. +# type: float +# parallax_occlusion_scale = 0.08 + +# Overall bias of parallax occlusion effect, usually scale/2. +# type: float +# parallax_occlusion_bias = 0.04 + +##### Waving Nodes + +# Set to true enables waving water. +# Requires shaders to be enabled. +# type: bool +# enable_waving_water = false + +# type: float +# water_wave_height = 1.0 + +# type: float +# water_wave_length = 20.0 + +# type: float +# water_wave_speed = 5.0 + +# Set to true enables waving leaves. +# Requires shaders to be enabled. +# type: bool +# enable_waving_leaves = false + +# Set to true enables waving plants. +# Requires shaders to be enabled. +# type: bool +# enable_waving_plants = false + +#### Advanced + +# Minimum wanted FPS. +# The amount of rendered stuff is dynamically set according to this. and viewing range min and max. +# type: int +# wanted_fps = 30 + +# If FPS would go higher than this, limit it by sleeping +# to not waste CPU power for no benefit. +# type: int +# fps_max = 60 + +# Maximum FPS when game is paused. +# type: int +# pause_fps_max = 20 + +# The allowed adjustment range for the automatic rendering range adjustment. +# Set this to be equal to viewing range minimum to disable the auto-adjustment algorithm. +# type: int +# viewing_range_nodes_max = 160 + +# The allowed adjustment range for the automatic rendering range adjustment. +# Set this to be equal to viewing range minimum to disable the auto-adjustment algorithm. +# type: int +# viewing_range_nodes_min = 35 + +# Vertical initial window size. +# type: int +# screenW = 800 + +# Horizontal initial window size. +# type: int +# screenH = 600 + +# Fullscreen mode. +# type: bool +# fullscreen = false + +# Bits per pixel (aka color depth) in fullscreen mode. +# type: int +# fullscreen_bpp = 24 + +# Vertical screen synchronization. +# type: bool +# vsync = false + +# Field of view in degrees. +# type: int min: 30 max: 160 +# fov = 72 + +# Adjust the gamma encoding for the light tables. Lower numbers are brighter. +# This setting is for the client only and is ignored by the server. +# type: float min: 1 max: 3 +# display_gamma = 1.8 + +# Path to texture directory. All textures are first searched from here. +# type: path +# texture_path = + +# The rendering back-end for Irrlicht. +# type: enum values: null, software, burningsvideo, direct3d8, direct3d9, opengl +# video_driver = opengl + +# Height on which clouds are appearing. +# type: int +# cloud_height = 120 + +# Radius of cloud area stated in number of 64 node cloud squares. +# Values larger than 26 will start to produce sharp cutoffs at cloud area corners. +# type: int +# cloud_radius = 12 + +# Multiplier for view bobbing. +# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double. +# type: float +# view_bobbing_amount = 1.0 + +# Multiplier for fall bobbing. +# For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double. +# type: float +# fall_bobbing_amount = 0.0 + +# 3D support. +# Currently supported: +# - none: no 3d output. +# - anaglyph: cyan/magenta color 3d. +# - interlaced: odd/even line based polarisation screen support. +# - topbottom: split screen top/bottom. +# - sidebyside: split screen side by side. +# type: enum values: none, anaglyph, interlaced, topbottom, sidebyside +# 3d_mode = none + +# In-game chat console background color (R,G,B). +# type: string +# console_color = (0,0,0) + +# In-game chat console background alpha (opaqueness, between 0 and 255). +# type: int min: 0 max: 255 +# console_alpha = 200 + +# Selection box border color (R,G,B). +# type: string +# selectionbox_color = (0,0,0) + +# Width of the selectionbox's lines around nodes. +# type: int min: 1 max: 5 +# selectionbox_width = 2 + +# Crosshair color (R,G,B). +# type: string +# crosshair_color = (255,255,255) + +# Crosshair alpha (opaqueness, between 0 and 255). +# type: int min: 0 max: 255 +# crosshair_alpha = 255 + +# Whether node texture animations should be desynchronized per mapblock. +# type: bool +# desynchronize_mapblock_texture_animation = true + +# Maximum proportion of current window to be used for hotbar. +# Useful if there's something to be displayed right or left of hotbar. +# type: float +# hud_hotbar_max_width = 1.0 + +# Enable selection highlighting for nodes (disables selectionbox). +# type: bool +# enable_node_highlighting = false + +# Enables caching of facedir rotated meshes. +# type: bool +# enable_mesh_cache = false + +# Enables minimap. +# type: bool +# enable_minimap = true + +# Shape of the minimap. Enabled = round, disabled = square. +# type: bool +# minimap_shape_round = true + +# True = 256 +# False = 128 +# Useable to make minimap smoother on slower machines. +# type: bool +# minimap_double_scan_height = true + +# Make fog and sky colors depend on daytime (dawn/sunset) and view direction. +# type: bool +# directional_colored_fog = true + # The strength (darkness) of node ambient-occlusion shading. # Lower is darker, Higher is lighter. The valid range of values for this # setting is 0.25 to 4.0 inclusive. If the value is out of range it will be # set to the nearest valid value. -#enable_mesh_cache = true -# The time in seconds it takes between repeated -# right clicks when holding the right mouse button. -#repeat_rightclick_time = 0.25 -# Make fog and sky colors depend on daytime (dawn/sunset) and view direction -#directional_colored_fog = true -# Delay showing tooltips, stated in milliseconds -#tooltip_show_delay = 400 -# Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens -#screen_dpi = 72 -# Default timeout for cURL, stated in milliseconds. -# Only has an effect if compiled with cURL. -#curl_timeout = 5000 -# Limits number of parallel HTTP requests. Affects: -# Media fetch if server uses remote_media setting. -# Serverlist download and server announcement. -# Downloads performed by main menu (e.g. mod manager). -# Only has an effect if compiled with cURL. -#curl_parallel_limit = 8 -# Maximum time in ms a file download (e.g. a mod download) may take -#curl_file_download_timeout = 300000 -# Enable usage of remote media server (if provided by server) -#enable_remote_media_server = true -# Url to the server list displayed in the Multiplayer Tab -#serverlist_url = servers.minetest.net -# File in client/serverlist/ that contains your favorite servers displayed in the Multiplayer Tab -#serverlist_file = favoriteservers.txt -# Whether freetype fonts are used, requires freetype support to be compiled in -#freetype = true -# Path to TrueTypeFont or bitmap -#font_path = fonts/liberationsans.ttf -#font_size = 15 -# Font shadow offset, if 0 then shadow will not be drawn -#font_shadow = 1 -# Font shadow alpha (opaqueness, between 0 and 255) -#font_shadow_alpha = 128 -#mono_font_path = fonts/liberationmono.ttf -#mono_font_size = 15 -# This font will be used for certain languages -#fallback_font_path = fonts/DroidSansFallbackFull.ttf -#fallback_font_size = 15 -#fallback_font_shadow = 1 -#fallback_font_shadow_alpha = 128 +# type: float min: 0.25 max: 4 +# ambient_occlusion_gamma = 2.2 + +### Menus + +# Use a cloud animation for the main menu background. +# type: bool +# menu_clouds = true + +# Scale gui by a user specified value. +# Use a nearest-neighbor-anti-alias filter to scale the GUI. +# This will smooth over some of the rough edges, and blend +# pixels when scaling down, at the cost of blurring some +# edge pixels when images are scaled by non-integer sizes. +# type: float +# gui_scaling = 1.0 + +# When gui_scaling_filter is true, all GUI images need to be +# filtered in software, but some images are generated directly +# to hardware (e.g. render-to-texture for nodes in inventory). +# type: bool +# gui_scaling_filter = false + +# When gui_scaling_filter_txr2img is true, copy those images +# from hardware to software for scaling. When false, fall back +# to the old scaling method, for video drivers that don't +# propery support downloading textures back from hardware. +# type: bool +# gui_scaling_filter_txr2img = true + +# Delay showing tooltips, stated in milliseconds. +# type: int +# tooltip_show_delay = 400 + +# Whether freetype fonts are used, requires freetype support to be compiled in. +# type: bool +# freetype = true + +# Path to TrueTypeFont or bitmap. +# type: path +# font_path = fonts/liberationsans.ttf + +# type: int +# font_size = 15 + +# Font shadow offset, if 0 then shadow will not be drawn. +# type: int +# font_shadow = 1 + +# Font shadow alpha (opaqueness, between 0 and 255). +# type: int min: 0 max: 255 +# font_shadow_alpha = 128 + +# type: path +# mono_font_path = fonts/liberationmono.ttf + +# type: int +# mono_font_size = 15 + +# This font will be used for certain languages. +# type: path +# fallback_font_path = fonts/DroidSansFallbackFull.ttf + +# type: int +# fallback_font_size = 15 + +# type: int +# fallback_font_shadow = 1 + +# type: int min: 0 max: 255 +# fallback_font_shadow_alpha = 128 + +# Path to save screenshots at. +# type: path +# screenshot_path = + +### Advanced + +# Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens. +# type: int +# screen_dpi = 72 + +## Sound + +# type: bool +# enable_sound = true + +# type: float min: 0 max: 1 +# sound_volume = 0.7 + +## Advanced + +# Timeout for client to remove unused map data from memory. +# type: int +# client_unload_unused_data_timeout = 600 + +# Maximum number of mapblocks for client to be kept in memory. +# Set to -1 for unlimited amount. +# type: int +# client_mapblock_limit = 5000 + +# Whether to show the client debug info (has the same effect as hitting F5). +# type: bool +# show_debug = false # -# Server stuff +# Server / Singleplayer # -# Network port to listen (UDP) -#port = 30000 -# Bind address -#bind_address = -# Name of server -#server_name = MultiCraft server -# Description of server -#server_description = mine here -# Domain name of server -#server_address = game.MultiCraft.mobi -# Homepage of server -#server_url = http://MultiCraft.mobi -# Automaticaly report to masterserver -#server_announce = 0 -# Announce to this masterserver. -# If you want to announce your ipv6 address - use serverlist_url = v6.servers.minetest.net. -#serverlist_url = servers.minetest.net -# World directory (everything in the world is stored here) -#map-dir = /custom/world -# Message of the Day -#motd = Welcome to this awesome MultiCraft server! -# Maximum number of players connected simultaneously -#max_users = 15 -# Set to true to disallow old clients from connecting -#strict_protocol_version_checking = false -# Time in seconds for item entity to live. Default value: 900s. -# Setting it to -1 disables the feature. -#item_entity_ttl = 900 -# Set to true to enable creative mode (unlimited inventory) -#creative_mode = false -# Enable players getting damage and dying -#enable_damage = false -# A chosen map seed for a new map, leave empty for random -#fixed_map_seed = -# Gives some stuff to players at the beginning -#give_initial_stuff = false -# New users need to input this password -#default_password = -# Available privileges: interact, shout, teleport, settime, privs, ... -# See /privs in game for a full list on your server and mod configuration. -#default_privs = interact, shout -# Whether players are shown to clients without any range limit. -# Deprecated, use the setting player_transfer_distance instead. -#unlimited_player_transfer_distance = true -# Defines the maximal player transfer distance in blocks (0 = unlimited) -#player_transfer_distance = 0 -# Whether to enable players killing each other -#enable_pvp = true -# If this is set, players will always (re)spawn at the given position -#static_spawnpoint = 0, 10, 0 -# If true, new players cannot join with an empty password -#disallow_empty_password = false -# If true, disable cheat prevention in multiplayer -#disable_anticheat = false -# If true, actions are recorded for rollback -# This option is only read when server starts -#enable_rollback_recording = false -# Handling for deprecated lua api calls: -# "legacy" = (try to) mimic old behaviour (default for release). -# "log" = mimic and log backtrace of deprecated call (default for debug). -# "error" = abort on usage of deprecated call (suggested for mod developers). -#deprecated_lua_api_handling = legacy -# Mod profiler -#mod_profiling = false -# Detailed mod profile data -#detailed_profiling = false -# Profiler data print interval. #0 = disable. -#profiler_print_interval = 0 -#enable_mapgen_debug_info = false -# From how far client knows about objects -#active_object_send_range_blocks = 3 -# How large area of blocks are subject to the active block stuff. -# Active = objects are loaded and ABMs run. -#active_block_range = 2 -# How many blocks are flying in the wire simultaneously per client -#max_simultaneous_block_sends_per_client = 10 -# How many blocks are flying in the wire simultaneously per server -#max_simultaneous_block_sends_server_total = 40 -# From how far blocks are sent to clients, stated in mapblocks (16 nodes) -#max_block_send_distance = 10 -# From how far blocks are generated for clients, stated in mapblocks (16 nodes) -#max_block_generate_distance = 6 -# Number of extra blocks that can be loaded by /clearobjects at once. -# This is a trade-off between sqlite transaction overhead and -# memory consumption (4096=100MB, as a rule of thumb). -#max_clearobjects_extra_loaded_blocks = 4096 -# Maximum number of forceloaded blocks -#max_forceloaded_blocks = 16 -# Interval of sending time of day to clients -#time_send_interval = 5 -# Controls length of day/night cycle. -# 72=20min, 360=4min, 1=24hour, 0=day/night/whatever stays unchanged. -#time_speed = 72 -#server_unload_unused_data_timeout = 29 -# Maximum number of statically stored objects in a block -#max_objects_per_block = 49 -# Interval of saving important changes in the world, stated in seconds -#server_map_save_interval = 5.3 -# http://www.sqlite.org/pragma.html#pragma_synchronous only numeric values: 0 1 2 -#sqlite_synchronous = 2 -# To reduce lag, block transfers are slowed down when a player is building something. -# This determines how long they are slowed down after placing or removing a node. -#full_block_send_enable_min_time_from_building = 2.0 -# Length of a server tick and the interval at which objects are generally updated over network -#dedicated_server_step = 0.1 -# Can be set to true to disable shutting down on invalid world data -#ignore_world_load_errors = false +# Name of the server, to be displayed when players join and in the serverlist. +# type: string +# server_name = multicraft server + +# Description of server, to be displayed when players join and in the serverlist. +# type: string +# server_description = mine here + +# Domain name of server, to be displayed in the serverlist. +# type: string +# server_address = game.multicraft.net + +# Homepage of server, to be displayed in the serverlist. +# type: string +# server_url = http://multicraft.net + +# Automaticaly report to the serverlist. +# type: bool +# server_announce = false + +# Announce to this serverlist. +# If you want to announce your ipv6 address, use serverlist_url = v6.servers.multicraft.net. +# type: string +# serverlist_url = servers.multicraft.net + +## Network + +# Network port to listen (UDP). +# This value will be overridden when starting from the main menu. +# type: int +# port = 30000 + +# The network interface that the server listens on. +# type: string +# bind_address = + +# Enable to disallow old clients from connecting. +# Older clients are compatible in the sense that they will not crash when connecting +# to new servers, but they may not support all new features that you are expecting. +# type: bool +# strict_protocol_version_checking = false + # Specifies URL from which client fetches media instead of using UDP. # $filename should be accessible from $remote_media$filename via cURL # (obviously, remote_media should end with a slash). -# Files that are not present would be fetched the usual way. -#remote_media = -# Level of logging to be written to debug.txt: -# 0 = none, 1 = errors and debug, 2 = action, 3 = info, 4 = verbose. -#debug_log_level = 2 -# Maximum number of blocks that can be queued for loading -#emergequeue_limit_total = 256 -# Maximum number of blocks to be queued that are to be loaded from file. -# Set to blank for an appropriate amount to be chosen automatically. -#emergequeue_limit_diskonly = 32 -# Maximum number of blocks to be queued that are to be generated. -# Set to blank for an appropriate amount to be chosen automatically. -#emergequeue_limit_generate = 32 -# Number of emerge threads to use. Make this field blank, or increase this number -# to use multiple threads. On multiprocessor systems, this will improve mapgen speed greatly -# at the cost of slightly buggy caves. -#num_emerge_threads = 1 -# Maximum number of packets sent per send step, if you have a slow connection -# try reducing it, but don't reduce it to a number below double of targeted -# client number. -#max_packets_per_iteration = 1024 +# Files that are not present will be fetched the usual way. +# type: string +# remote_media = -# Enable/disable IPv6 -#enable_ipv6 = true # Enable/disable running an IPv6 server. An IPv6 server may be restricted # to IPv6 clients, depending on system configuration. # Ignored if bind_address is set. -#ipv6_server = false -#main_menu_script = -#main_menu_game_mgr = 0 -#main_menu_mod_mgr = 1 -#modstore_download_url = https://forum.minetest.net/media/ -#modstore_listmods_url = https://forum.minetest.net/mmdb/mods/ -#modstore_details_url = https://forum.minetest.net/mmdb/mod/*/ -# Makes DirectX work with LuaJIT. Disable if it causes troubles. -#high_precision_fpu = true -# Override language. When no value is provided (default) system language is used. -# Check "locale" directory for the list of available translations. -#language = +# type: bool +# ipv6_server = false -# -# Physics stuff -# +### Advanced -#movement_acceleration_default = 3 -#movement_acceleration_air = 2 -#movement_acceleration_fast = 10 -#movement_speed_walk = 4 -#movement_speed_crouch = 1.35 -#movement_speed_fast = 20 -#movement_speed_climb = 2 -#movement_speed_jump = 6.5 -#movement_speed_descend = 6 -#movement_liquid_fluidity = 1 -#movement_liquid_fluidity_smooth = 0.5 -#movement_liquid_sink = 10 -#movement_gravity = 9.81 +# How many blocks are flying in the wire simultaneously per client. +# type: int +# max_simultaneous_block_sends_per_client = 10 -# -# Mapgen stuff -# +# How many blocks are flying in the wire simultaneously for the whole server. +# type: int +# max_simultaneous_block_sends_server_total = 40 -# Name of map generator to be used. Currently supported: v5, v6, v7, singlenode. -#mg_name = v6 -# Water surface level of map -#water_level = 1 -# Size of chunks to be generated, stated in mapblocks (16 nodes) -#chunksize = 5 -# Global map generation attributes. Currently supported: trees, caves, flat, dungeons, light. +# To reduce lag, block transfers are slowed down when a player is building something. +# This determines how long they are slowed down after placing or removing a node. +# type: float +# full_block_send_enable_min_time_from_building = 2.0 + +# Maximum number of packets sent per send step, if you have a slow connection +# try reducing it, but don't reduce it to a number below double of targeted +# client number. +# type: int +# max_packets_per_iteration = 1024 + +## Game + +# Default game when creating a new world. +# This will be overridden when creating a world from the main menu. +# type: string +# default_game = multicraft + +# Message of the day displayed to players connecting. +# type: string +# motd = + +# Maximum number of players that can connect simultaneously. +# type: int +# max_users = 15 + +# World directory (everything in the world is stored here). +# Not needed if starting from the main menu. +# type: path +# map-dir = + +# Time in seconds for item entity (dropped items) to live. +# Setting it to -1 disables the feature. +# type: int +# item_entity_ttl = 900 + +# Enable players getting damage and dying. +# type: bool +# enable_damage = false + +# A chosen map seed for a new map, leave empty for random. +# Will be overridden when creating a new world in the main menu. +# type: string +# fixed_map_seed = + +# New users need to input this password. +# type: string +# default_password = + +# The privileges that new users automatically get. +# See /privs in game for a full list on your server and mod configuration. +# type: string +# default_privs = interact, shout + +# Whether players are shown to clients without any range limit. +# Deprecated, use the setting player_transfer_distance instead. +# type: bool +# unlimited_player_transfer_distance = true + +# Defines the maximal player transfer distance in blocks (0 = unlimited). +# type: int +# player_transfer_distance = 0 + +# Whether to allow players to damage and kill each other. +# type: bool +# enable_pvp = true + +# If this is set, players will always (re)spawn at the given position. +# type: string +# static_spawnpoint = + +# Maximum distance above water level for player spawn. +# Larger values result in spawn points closer to (x = 0, z = 0). +# Smaller values may result in a suitable spawn point not being found, +# resulting in a spawn at (0, 0, 0) possibly buried underground. +# type: int +# vertical_spawn_range = 16 + +# If enabled, new players cannot join with an empty password. +# type: bool +# disallow_empty_password = false + +# If enabled, disable cheat prevention in multiplayer. +# type: bool +# disable_anticheat = false + +# If enabled, actions are recorded for rollback. +# This option is only read when server starts. +# type: bool +# enable_rollback_recording = false + +# A message to be displayed to all clients when the server shuts down. +# type: string +# kick_msg_shutdown = Server shutting down. + +# A message to be displayed to all clients when the server crashes. +# type: string +# kick_msg_crash = This server has experienced an internal error. You will now be disconnected. + +# Whether to ask clients to reconnect after a (Lua) crash. +# Set this to true if your server is set up to restart automatically. +# type: bool +# ask_reconnect_on_crash = false + +# From how far clients know about objects, stated in mapblocks (16 nodes). +# type: int +# active_object_send_range_blocks = 3 + +# How large area of blocks are subject to the active block stuff, stated in mapblocks (16 nodes). +# In active blocks objects are loaded and ABMs run. +# type: int +# active_block_range = 2 + +# From how far blocks are sent to clients, stated in mapblocks (16 nodes). +# type: int +# max_block_send_distance = 10 + +# Maximum number of forceloaded mapblocks. +# type: int +# max_forceloaded_blocks = 16 + +# Interval of sending time of day to clients. +# type: int +# time_send_interval = 5 + +# Controls length of day/night cycle. +# Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged. +# type: int +# time_speed = 72 + +# Interval of saving important changes in the world, stated in seconds. +# type: float +# server_map_save_interval = 5.3 + +### Physics + +# type: float +# movement_acceleration_default = 3 + +# type: float +# movement_acceleration_air = 2 + +# type: float +# movement_acceleration_fast = 10 + +# type: float +# movement_speed_walk = 4 + +# type: float +# movement_speed_crouch = 1.35 + +# type: float +# movement_speed_fast = 20 + +# type: float +# movement_speed_climb = 2 + +# type: float +# movement_speed_jump = 6.5 + +# type: float +# movement_speed_descend = 6 + +# type: float +# movement_liquid_fluidity = 1 + +# type: float +# movement_liquid_fluidity_smooth = 0.5 + +# type: float +# movement_liquid_sink = 10 + +# type: float +# movement_gravity = 9.81 + +### Advanced + +# Handling for deprecated lua api calls: +# - legacy: (try to) mimic old behaviour (default for release). +# - log: mimic and log backtrace of deprecated call (default for debug). +# - error: abort on usage of deprecated call (suggested for mod developers). +# type: enum values: legacy, log, error +# deprecated_lua_api_handling = legacy + +# Useful for mod developers. +# type: bool +# mod_profiling = false + +# Detailed mod profile data. Useful for mod developers. +# type: bool +# detailed_profiling = false + +# Profiler data print interval. 0 = disable. Useful for developers. +# type: int +# profiler_print_interval = 0 + +# Number of extra blocks that can be loaded by /clearobjects at once. +# This is a trade-off between sqlite transaction overhead and +# memory consumption (4096=100MB, as a rule of thumb). +# type: int +# max_clearobjects_extra_loaded_blocks = 4096 + +# How much the server will wait before unloading unused mapblocks. +# Higher value is smoother, but will use more RAM. +# type: int +# server_unload_unused_data_timeout = 29 + +# Maximum number of statically stored objects in a block. +# type: int +# max_objects_per_block = 49 + +# See http://www.sqlite.org/pragma.html#pragma_synchronous +# type: enum values: 0, 1, 2 +# sqlite_synchronous = 2 + +# Length of a server tick and the interval at which objects are generally updated over network. +# type: float +# dedicated_server_step = 0.1 + +# If enabled, invalid world data won't cause the server to shut down. +# Only enable this if you know what you are doing. +# type: bool +# ignore_world_load_errors = false + +# Max liquids processed per step. +# type: int +# liquid_loop_max = 100000 + +# The time (in seconds) that the liquids queue may grow beyond processing +# capacity until an attempt is made to decrease its size by dumping old queue +# items. A value of 0 disables the functionality. +# type: int +# liquid_queue_purge_time = 0 + +# Liquid update interval in seconds. +# type: float +# liquid_update = 1.0 + +## Mapgen + +# Name of map generator to be used when creating a new world. +# Creating a world in the main menu will override this. +# type: enum values: v5, v6, v7, singlenode +# mg_name = v6 + +# Water surface level of the world. +# type: int +# water_level = 1 + +# From how far blocks are generated for clients, stated in mapblocks (16 nodes). +# type: int +# max_block_generate_distance = 6 + +# Where the map generator stops. +# Please note: +# - Limited to 31000 (setting above has no effect) +# - The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks). +# - Those groups have an offset of -32, -32 nodes from the origin. +# - Only groups which are within the map_generation_limit are generated +# type: int min: 0 max: 31000 +# map_generation_limit = 31000 + +# Global map generation attributes. # Flags that are not specified in the flag string are not modified from the default. -# To explicitly turn off a flag, prepend "no" to the beginning, e.g. nolight. -#mg_flags = trees, caves, dungeons, light -# Enable/disable floating dungeons and dungeon slices -#enable_floating_dungeons = true +# Flags starting with "no" are used to explicitly disable them. +# 'trees' and 'flat' flags only have effect in mgv6. +# type: flags possible values: trees, caves, dungeons, light, flat, notrees, nocaves, nodungeons, nolight, noflat +# mg_flags = trees,caves,dungeons,light + +### Advanced + +# Size of chunks to be generated at once by mapgen, stated in mapblocks (16 nodes). +# type: int +# chunksize = 5 + +# Dump the mapgen debug infos. +# type: bool +# enable_mapgen_debug_info = false + +# Maximum number of blocks that can be queued for loading. +# type: int +# emergequeue_limit_total = 256 + +# Maximum number of blocks to be queued that are to be loaded from file. +# Set to blank for an appropriate amount to be chosen automatically. +# type: int +# emergequeue_limit_diskonly = 32 + +# Maximum number of blocks to be queued that are to be generated. +# Set to blank for an appropriate amount to be chosen automatically. +# type: int +# emergequeue_limit_generate = 32 + +# Number of emerge threads to use. Make this field blank, or increase this number +# to use multiple threads. On multiprocessor systems, this will improve mapgen speed greatly +# at the cost of slightly buggy caves. +# type: int +# num_emerge_threads = 1 + +# Noise parameters for biome API temperature, humidity and biome blend. +# type: noise_params +# mg_biome_np_heat = 50, 50, (750, 750, 750), 5349, 3, 0.5, 2.0 + +# type: noise_params +# mg_biome_np_heat_blend = 0, 1.5, (8, 8, 8), 13, 2, 1.0, 2.0 + +# type: noise_params +# mg_biome_np_humidity = 50, 50, (750, 750, 750), 842, 3, 0.5, 2.0 + +# type: noise_params +# mg_biome_np_humidity_blend = 0, 1.5, (8, 8, 8), 90003, 2, 1.0, 2.0 + +#### Mapgen v5 + +# type: noise_params +# mgv5_np_filler_depth = 0, 1, (150, 150, 150), 261, 4, 0.7, 2.0 + +# type: noise_params +# mgv5_np_factor = 0, 1, (250, 250, 250), 920381, 3, 0.45, 2.0 + +# type: noise_params +# mgv5_np_height = 0, 10, (250, 250, 250), 84174, 4, 0.5, 2.0 + +# type: noise_params +# mgv5_np_cave1 = 0, 12, (50, 50, 50), 52534, 4, 0.5, 2.0 + +# type: noise_params +# mgv5_np_cave2 = 0, 12, (50, 50, 50), 10325, 4, 0.5, 2.0 + +#### Mapgen v6 # Map generation attributes specific to Mapgen V6. -# Currently supported: jungles, biomeblend, mudflow, snowbiomes. # When snowbiomes are enabled jungles are enabled and the jungles flag is ignored. -#mgv6_spflags = jungles, biomeblend, mudflow, snowbiomes -# Controls size of deserts and beaches in Mapgen V6 +# Flags that are not specified in the flag string are not modified from the default. +# Flags starting with "no" are used to explicitly disable them. +# type: flags possible values: jungles, biomeblend, mudflow, snowbiomes, nojungles, nobiomeblend, nomudflow, nosnowbiomes +# mgv6_spflags = jungles,biomeblend,mudflow,snowbiomes + +# Controls size of deserts and beaches in Mapgen V6. # When snowbiomes are enabled 'mgv6_freq_desert' is ignored. -#mgv6_freq_desert = 0.45 -#mgv6_freq_beach = 0.15 +# type: float +# mgv6_freq_desert = 0.45 + +# type: float +# mgv6_freq_beach = 0.15 + +# type: noise_params +# mgv6_np_terrain_base = -4, 20, (250, 250, 250), 82341, 5, 0.6, 2.0 + +# type: noise_params +# mgv6_np_terrain_higher = 20, 16, (500, 500, 500), 85039, 5, 0.6, 2.0 + +# type: noise_params +# mgv6_np_steepness = 0.85, 0.5, (125, 125, 125), -932, 5, 0.7, 2.0 + +# type: noise_params +# mgv6_np_height_select = 0.5, 1, (250, 250, 250), 4213, 5, 0.69, 2.0 + +# type: noise_params +# mgv6_np_mud = 4, 2, (200, 200, 200), 91013, 3, 0.55, 2.0 + +# type: noise_params +# mgv6_np_beach = 0, 1, (250, 250, 250), 59420, 3, 0.50, 2.0 + +# type: noise_params +# mgv6_np_biome = 0, 1, (500, 500, 500), 9130, 3, 0.50, 2.0 + +# type: noise_params +# mgv6_np_cave = 6, 6, (250, 250, 250), 34329, 3, 0.50, 2.0 + +# type: noise_params +# mgv6_np_humidity = 0.5, 0.5, (500, 500, 500), 72384, 3, 0.50, 2.0 + +# type: noise_params +# mgv6_np_trees = 0, 1, (125, 125, 125), 2, 4, 0.66, 2.0 + +# type: noise_params +# mgv6_np_apple_trees = 0, 1, (100, 100, 100), 342902, 3, 0.45, 2.0 + +#### Mapgen v7 # Map generation attributes specific to Mapgen V7. -# Currently supported: mountains, ridges. -#mgv7_spflags = mountains, ridges +# 'ridges' are the rivers. +# Flags that are not specified in the flag string are not modified from the default. +# Flags starting with "no" are used to explicitly disable them. +# type: flags possible values: mountains, ridges, nomountains, noridges +# mgv7_spflags = mountains,ridges -# Perlin noise attributes for different map generation parameters. -# Noise parameters can be specified as a set of positional values: -# Offset, scale, (spread factors), seed offset, number of octaves, persistence, lacunarity. -#mgv6_np_terrain_base = -4, 20, (250, 250, 250), 82341, 5, 0.6, 2.0 -# Or the new group format can be used instead, for example: -#mgv6_np_terrain_base = { -# offset = -4 -# scale = 20 -# spread = (250, 250, 250) -# seed = 82341 -# octaves = 5 -# persistence = 0.6 -# lacunarity = 2.0 -# flags = "defaults" -#} -# Only the group format supports noise flags which are needed for eased noise. -# Mgv5 uses eased noise for np_ground so this is shown in group format, -# other noise parameters are shown in positional format to save space. +# type: noise_params +# mgv7_np_terrain_base = 4, 70, (600, 600, 600), 82341, 5, 0.6, 2.0 -# Noise parameters for biome API temperature and humidity -#mg_biome_np_heat = 50, 50, (750, 750, 750), 5349, 3, 0.5, 2.0 -#mg_biome_np_humidity = 50, 50, (750, 750, 750), 842, 3, 0.5, 2.0 +# type: noise_params +# mgv7_np_terrain_alt = 4, 25, (600, 600, 600), 5934, 5, 0.6, 2.0 -#mgv5_np_filler_depth = 0, 1, (150, 150, 150), 261, 4, 0.7, 2.0 -#mgv5_np_factor = 0, 1, (250, 250, 250), 920381, 3, 0.45, 2.0 -#mgv5_np_height = 0, 10, (250, 250, 250), 84174, 4, 0.5, 2.0 -#mgv5_np_cave1 = 0, 12, (50, 50, 50), 52534, 4, 0.5, 2.0 -#mgv5_np_cave2 = 0, 12, (50, 50, 50), 10325, 4, 0.5, 2.0 -#mgv5_np_ground = { -# offset = 0 -# scale = 40 -# spread = (80, 80, 80) -# seed = 983240 -# octaves = 4 -# persistence = 0.55 -# lacunarity = 2.0 -# flags = "eased" -#} +# type: noise_params +# mgv7_np_terrain_persist = 0.6, 0.1, (2000, 2000, 2000), 539, 3, 0.6, 2.0 -#mgv6_np_terrain_base = -4, 20, (250, 250, 250), 82341, 5, 0.6, 2.0 -#mgv6_np_terrain_higher = 20, 16, (500, 500, 500), 85039, 5, 0.6, 2.0 -#mgv6_np_steepness = 0.85, 0.5, (125, 125, 125), -932, 5, 0.7, 2.0 -#mgv6_np_height_select = 0.5, 1, (250, 250, 250), 4213, 5, 0.69, 2.0 -#mgv6_np_mud = 4, 2, (200, 200, 200), 91013, 3, 0.55, 2.0 -#mgv6_np_beach = 0, 1, (250, 250, 250), 59420, 3, 0.50, 2.0 -#mgv6_np_biome = 0, 1, (500, 500, 500), 9130, 3, 0.50, 2.0 -#mgv6_np_cave = 6, 6, (250, 250, 250), 34329, 3, 0.50, 2.0 -#mgv6_np_humidity = 0.5, 0.5, (500, 500, 500), 72384, 3, 0.50, 2.0 -#mgv6_np_trees = 0, 1, (125, 125, 125), 2, 4, 0.66, 2.0 -#mgv6_np_apple_trees = 0, 1, (100, 100, 100), 342902, 3, 0.45, 2.0 +# type: noise_params +# mgv7_np_height_select = -12, 24, (500, 500, 500), 4213, 6, 0.7, 2.0 -#mgv7_np_terrain_base = 4, 70, (600, 600, 600), 82341, 6, 0.7, 2.0 -#mgv7_np_terrain_alt = 4, 25, (600, 600, 600), 5934, 5, 0.6, 2.0 -#mgv7_np_terrain_persist = 0.6, 0.1, (500, 500, 500), 539, 3, 0.6, 2.0 -#mgv7_np_height_select = -12, 24, (500, 500, 500), 4213, 6, 0.69, 2.0 -#mgv7_np_filler_depth = 0, 1.2, (150, 150, 150), 261, 4, 0.7, 2.0 -#mgv7_np_mount_height = 184, 72, (500, 500, 500), 72449, 4, 0.6, 2.0 -#mgv7_np_ridge_uwater = 0, 1, (1000, 1000, 1000), 85039, 5, 0.6, 2.0 -#mgv7_np_mountain = -0.6, 1, (250, 350, 250), 5333, 5, 0.68, 2.0 -#mgv7_np_ridge = 0, 1, (100, 100, 100), 6467, 4, 0.75, 2.0 -#mgv7_np_cave1 = 0, 12, (100, 100, 100), 52534, 4, 0.5, 2.0 -#mgv7_np_cave2 = 0, 12, (100, 100, 100), 10325, 4, 0.5, 2.0 +# type: noise_params +# mgv7_np_filler_depth = 0, 1.2, (150, 150, 150), 261, 3, 0.7, 2.0 + +# type: noise_params +# mgv7_np_mount_height = 256, 112, (1000, 1000, 1000), 72449, 3, 0.6, 2.0 + +# type: noise_params +# mgv7_np_ridge_uwater = 0, 1, (1000, 1000, 1000), 85039, 5, 0.6, 2.0 + +# type: noise_params +# mgv7_np_mountain = -0.6, 1, (250, 350, 250), 5333, 5, 0.63, 2.0 + +# type: noise_params +# mgv7_np_ridge = 0, 1, (100, 100, 100), 6467, 4, 0.75, 2.0 + +# type: noise_params +# mgv7_np_cave1 = 0, 12, (100, 100, 100), 52534, 4, 0.5, 2.0 + +# type: noise_params +# mgv7_np_cave2 = 0, 12, (100, 100, 100), 10325, 4, 0.5, 2.0 + +## Security + +# Prevent mods from doing insecure things like running shell commands. +# type: bool +# secure.enable_security = false + +# Comma-separated list of trusted mods that are allowed to access insecure +# functions even when mod security is on (via request_insecure_environment()). +# type: string +# secure.trusted_mods = + +# +# Client and Server +# + +# Name of the player. +# When running a server, clients connecting with this name are admins. +# When starting from the main menu, this is overridden. +# type: string +# name = + +# Set the language. Leave empty to use the system language. +# A restart is required after changing this. +# type: enum values: , be, cs, da, de, eo, es, et, fr, hu, id, it, ja, jbo, ko, ky, lt, nb, nl, pl, pt, pt_BR, ro, ru, tr, uk, zh_CN, zh_TW +# language = + +# Level of logging to be written to debug.txt: +# - (no logging) +# - none (messages with no level) +# - error +# - warning +# - action +# - info +# - verbose +# type: enum values: , warning, action, info, verbose +# debug_log_level = action + +# IPv6 support. +# type: bool +# enable_ipv6 = true + +## Advanced + +# Default timeout for cURL, stated in milliseconds. +# Only has an effect if compiled with cURL. +# type: int +# curl_timeout = 5000 + +# Limits number of parallel HTTP requests. Affects: +# - Media fetch if server uses remote_media setting. +# - Serverlist download and server announcement. +# - Downloads performed by main menu (e.g. mod manager). +# Only has an effect if compiled with cURL. +# type: int +# curl_parallel_limit = 8 + +# Maximum time in ms a file download (e.g. a mod download) may take. +# type: int +# curl_file_download_timeout = 300000 + +# Makes DirectX work with LuaJIT. Disable if it causes troubles. +# type: bool +# high_precision_fpu = true + +# Replaces the default main menu with a custom one. +# type: string +# main_menu_script = + +# type: int +# main_menu_game_mgr = 0 + +# type: int +# main_menu_mod_mgr = 1 + +# type: string +# modstore_download_url = https://forum.multicraft.net/media/ + +# type: string +# modstore_listmods_url = https://forum.multicraft.net/mmdb/mods/ + +# type: string +# modstore_details_url = https://forum.multicraft.net/mmdb/mod/*/ # Prevent mods from doing insecure things like running shell commands. #secure.enable_security = false # Comma-separated list of trusted mods that are allowed to access insecure # functions even when mod security is on (via request_insecure_environment()). #secure.trusted_mods = - diff --git a/po/be/minetest.po b/po/be/minetest.po index 0e60035a..ac84c027 100644 --- a/po/be/minetest.po +++ b/po/be/minetest.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" "PO-Revision-Date: 2013-11-23 17:37+0100\n" "Last-Translator: Selat \n" "Language-Team: Belarusian\n" @@ -15,960 +15,3389 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:26 -msgid "World:" +#: builtin/fstk/ui.lua +msgid "Reconnect" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -msgid "Hide Game" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 -msgid "Depends:" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:68 -msgid "Enable MP" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "" -#: builtin/mainmenu/modmgr.lua:366 -msgid "Install Mod: unable to find suitable foldername for modpack $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 -msgid "Search" -msgstr "" - -#: builtin/mainmenu/store.lua:125 -msgid "Downloading" -msgstr "" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:163 -msgid "Shortname:" -msgstr "" - -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 -msgid "Rating" -msgstr "" - -#: builtin/mainmenu/store.lua:501 -msgid "re-Install" -msgstr "" - -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "" - -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" +#: builtin/mainmenu/store.lua +msgid "Rating" msgstr "" -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" +#: builtin/mainmenu/store.lua +msgid "Search" msgstr "" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Address / Port :" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" msgstr "" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -msgid "Configure" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" msgstr "" -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" msgstr "" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" msgstr "" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" msgstr "" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" msgstr "" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" msgstr "" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" +#: builtin/mainmenu/tab_server.lua +msgid "Public" msgstr "" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" msgstr "" -#: builtin/mainmenu/tab_settings.lua:140 -msgid "Fancy Trees" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:142 -msgid "Opaque Water" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:144 -msgid "Connected Glass" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "" -#: builtin/mainmenu/tab_settings.lua:167 -msgid "Reset singleplayer world" +#: builtin/mainmenu/tab_settings.lua +msgid "Disabled" msgstr "" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " +#: builtin/mainmenu/tab_settings.lua +msgid "Enabled" msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" +#: builtin/mainmenu/tab_settings.lua +msgid "Games" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 -msgid "Bumpmapping" +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." +#: builtin/mainmenu/tab_settings.lua +msgid "Select path" msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -msgid "Start Singleplayer" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "" -#: src/client.cpp:2726 +#: src/client.cpp +msgid "Connection timed out." +msgstr "" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp msgid "Item textures..." msgstr "" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "" - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." msgstr "" -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +msgid "Change Keys" +msgstr "" + +#: src/game.cpp +msgid "Change Password" +msgstr "" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp +msgid "Continue" +msgstr "" + +#: src/game.cpp +msgid "Creating client..." +msgstr "" + +#: src/game.cpp +msgid "Creating server..." +msgstr "" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "" + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp +msgid "Respawn" +msgstr "" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp +msgid "You died." +msgstr "" + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +#: src/guiFormSpecMenu.cpp +msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 -msgid "Left" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "" -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" msgstr "" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" +#: src/guiKeyChangeMenu.cpp +msgid "Forward" msgstr "" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" msgstr "" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "" + +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" msgstr "" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" msgstr "" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" msgstr "" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "" - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "" -#: src/keycode.cpp:224 -msgid "Left Button" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " msgstr "" -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "" + +#: src/keycode.cpp +msgid "Capital" +msgstr "" + +#: src/keycode.cpp +msgid "Clear" +msgstr "" + +#: src/keycode.cpp +msgid "Comma" +msgstr "" + +#: src/keycode.cpp +msgid "Control" +msgstr "" + +#: src/keycode.cpp +msgid "Convert" +msgstr "" + +#: src/keycode.cpp msgid "CrSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "" + +#: src/keycode.cpp +msgid "End" +msgstr "" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "" + +#: src/keycode.cpp msgid "ExSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "" + +#: src/keycode.cpp +msgid "Final" +msgstr "" + +#: src/keycode.cpp +msgid "Help" +msgstr "" + +#: src/keycode.cpp +msgid "Home" +msgstr "" + +#: src/keycode.cpp +msgid "Insert" +msgstr "" + +#: src/keycode.cpp +msgid "Junja" +msgstr "" + +#: src/keycode.cpp +msgid "Kana" +msgstr "" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "" + +#: src/keycode.cpp +msgid "Minus" +msgstr "" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "" + +#: src/keycode.cpp +msgid "Next" +msgstr "" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "" + +#: src/keycode.cpp +msgid "Period" +msgstr "" + +#: src/keycode.cpp +msgid "Plus" +msgstr "" + +#: src/keycode.cpp +msgid "Print" +msgstr "" + +#: src/keycode.cpp +msgid "Prior" +msgstr "" + +#: src/keycode.cpp +msgid "Return" +msgstr "" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Select" +msgstr "" + +#: src/keycode.cpp +msgid "Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/keycode.cpp +msgid "Space" +msgstr "" + +#: src/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/keycode.cpp +msgid "Up" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/keycode.cpp msgid "Zoom" msgstr "" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." msgstr "" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "3D clouds" msgstr "" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" +#: src/settings_translation_file.cpp +msgid "3D mode" msgstr "" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." msgstr "" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." msgstr "" -#: src/main.cpp:1953 -msgid "Invalid gamespec." +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Backward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bind address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds in menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Command key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect glass" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect to external media server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Damage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default password" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disable anticheat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double tap jump for fly" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double-tapping the jump key toggles fly mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables minimap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Forward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If disabled " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-Game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jump key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Left key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu mod manager" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu script" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Menus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mipmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion Scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Preload inventory textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Range select key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Right key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server / Singleplayer" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooth lighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneak key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Texture path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving leaves" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" msgstr "" diff --git a/po/cs/minetest.po b/po/cs/minetest.po index 563275b0..ad4653a0 100644 --- a/po/cs/minetest.po +++ b/po/cs/minetest.po @@ -7,157 +7,208 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-02-12 13:13+0100\n" -"PO-Revision-Date: 2015-02-12 16:16+0100\n" -"Last-Translator: Jakub Vanek \n" -"Language-Team: Czech <>\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-09-01 18:04+0200\n" +"Last-Translator: Jakub Vaněk \n" +"Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:67 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "Nastala chyba v Lua skriptu, což může být např. mod:" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "Nastala chyba:" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Hlavní nabídka" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "OK" -#: builtin/mainmenu/dlg_config_world.lua:26 -msgid "World:" -msgstr "Svět:" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Připojit" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -msgid "Hide Game" -msgstr "Skrýt vnitřní" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" -msgstr "Skrýt obsahy balíčků" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Nahrávám..." -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" -msgstr "Mod:" +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Závislosti:" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Uložit" +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" +"Zkuste znovu povolit seznam veřejných serverů a zkontrolujte své internetové " +"připojení." + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "Zrušit" -#: builtin/mainmenu/dlg_config_world.lua:68 -msgid "Enable MP" -msgstr "Povolit balíček" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Závislosti:" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Zakázat balíček" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "povoleno" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Povolit balíček" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Povolit vše" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Název světa" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Seedové číslo" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Skrýt vnitřní" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Generátor mapy" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Skrýt obsahy balíčků" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Hra" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod:" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Vytvořit" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Uložit" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "Nemáte nainstalované žádné podhry." +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Svět:" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "Stáhněte si jednu z minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "povoleno" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "Varování: \"Minimal development test\" je zamýšlen pouze pro vývojáře." - -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "Stáhněte si z minetest.net podhru, například minetest_game." - -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Svět s názvem \"$1\" už existuje" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Vytvořit" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Stáhněte si z minetest.net podhru, například minetest_game" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Stáhněte si jednu z minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Hra" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Generátor mapy" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Nebyla vybrána podhra nebo název" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Seedové číslo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "Varování: \"Minimal development test\" je zamýšlen pouze pro vývojáře." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Název světa" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Nemáte nainstalované žádné podhry." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Skutečně chcete odstranit \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:79 -msgid "Yes" -msgstr "Ano" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Jistě že ne!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: Nepodařilo se odstranit \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: Neplatná cesta k modu \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Jistě že ne!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Ano" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Doopravdy chcete smazat svět \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Ne" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Přejmenovat balíček modů:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Přijmout" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" -msgstr "Instalace modu: ze souboru: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Přejmenovat balíček modů:" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -165,407 +216,448 @@ msgstr "" "\n" "Instalace modu: špatný archiv nebo nepodporovaný typ souboru \"$1\"" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Selhala instalace $1 do $2" -#: builtin/mainmenu/modmgr.lua:366 -msgid "Install Mod: unable to find suitable foldername for modpack $1" -msgstr "Instalace modu: nenalezen vhodný adresář s příslušným názvem pro balíček $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Instalace modu: ze souboru: \"$1\"" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "Instalace modu: nenašel jsem skutečné jméno modu: $1" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "Neřazené" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" +msgstr "" +"Instalace modu: nenalezen vhodný adresář s příslušným názvem pro balíček $1" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "Hledání" - -#: builtin/mainmenu/store.lua:126 -msgid "Downloading $1, please wait..." -msgstr "Stahuji $1, prosím čekejte..." - -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "Úspěšně nainstalováno:" - -#: builtin/mainmenu/store.lua:162 -msgid "Shortname:" -msgstr "Zkratka:" - -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Hodnocení" - -#: builtin/mainmenu/store.lua:497 -msgid "re-Install" -msgstr "Přeinstalovat" - -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Instalovat" - -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "Zavřít obchod" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "Stahuji $1, prosím čekejte..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Instalovat" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "Strana $1 z $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Autoři" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Hodnocení" -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "Vývojáři jádra" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Hledání" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Zkratka:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Úspěšně nainstalováno:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Neřazené" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Přeinstalovat" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Aktivní přispěvatelé" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Klíčoví vývojáři" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Autoři" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Bývalí přispěvatelé" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Bývalí klíčoví vývojáři" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Nainstalované mody:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Online repozitář modů" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Popis modu není dostupný" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Informace o modu:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Přejmenovat" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Odinstalovat označený balíček" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Odinstalovat vybraný mod" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Vybrat soubor s modem:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "Mody" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Popis modu není dostupný" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Přejmenovat" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Vybrat soubor s modem:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Odinstalovat vybraný mod" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Odinstalovat označený balíček" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "Adresa / Port :" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" -msgstr "Jméno / Heslo :" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Seznam veřejných serverů" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Smazat" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Připojit" - -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 -msgid "Creative mode" -msgstr "Kreativní mód" - -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 -msgid "Damage enabled" -msgstr "Poškození povoleno" - -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 -msgid "PvP enabled" -msgstr "PvP povoleno" - -#: builtin/mainmenu/tab_multiplayer.lua:247 +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "Klient" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Nový" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Připojit" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -msgid "Configure" -msgstr "Nastavit" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Spustit hru" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Vyber svět:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:75 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" msgstr "Kreativní mód" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:77 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" -msgstr "Povolit poškození" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Poškození povoleno" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Veřejný" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Smazat" -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Jméno/Heslo" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Jméno / Heslo :" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Seznam veřejných serverů" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "PvP povoleno" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "Svázat adresu" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Nastavit" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Kreativní mód" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Povolit poškození" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Jméno/Heslo" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Nový" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "Nevybrali jste žádný svět!" + +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "Port" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Port serveru" +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Veřejný" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Vyber svět:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Server" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "No Filter" -msgstr "Žádný filtr" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Port serveru" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Bilinear Filter" -msgstr "Bilineární filtr" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Spustit hru" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Trilinear Filter" -msgstr "Trilineární filtr" +#: builtin/mainmenu/tab_settings.lua +msgid "\"" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Mipmap" -msgstr "Žádné Mipmapy" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Mipmap" -msgstr "Mipmapa" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Mipmap + Aniso. Filter" -msgstr "Mipmapa + Anizo. filtr" - -#: builtin/mainmenu/tab_settings.lua:77 -msgid "Are you sure to reset your singleplayer world?" -msgstr "Jste si jisti, že chcete resetovat místní svět?" - -#: builtin/mainmenu/tab_settings.lua:81 -msgid "No!!!" -msgstr "Ne!!!" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Smooth Lighting" -msgstr "Plynulé osvětlení" - -#: builtin/mainmenu/tab_settings.lua:183 -msgid "Enable Particles" -msgstr "Povolit částice" - -#: builtin/mainmenu/tab_settings.lua:185 -msgid "3D Clouds" -msgstr "3D mraky" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Fancy Trees" -msgstr "Ozdobné stromy" - -#: builtin/mainmenu/tab_settings.lua:189 -msgid "Opaque Water" -msgstr "Neprůhledná voda" - -#: builtin/mainmenu/tab_settings.lua:191 -msgid "Connected Glass" -msgstr "Propojené sklo" - -#: builtin/mainmenu/tab_settings.lua:193 -msgid "Node Highlighting" -msgstr "Zvýraznění bloků" - -#: builtin/mainmenu/tab_settings.lua:196 -msgid "Texturing:" -msgstr "Texturování:" - -#: builtin/mainmenu/tab_settings.lua:201 -msgid "Rendering:" -msgstr "Renderování:" - -#: builtin/mainmenu/tab_settings.lua:205 -msgid "Restart minetest for driver change to take effect" -msgstr "Aby se změna ovladače projevila, restartujte Minetest." - -#: builtin/mainmenu/tab_settings.lua:207 -msgid "Shaders" -msgstr "Shadery" - -#: builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Změnit nastavení kláves" -#: builtin/mainmenu/tab_settings.lua:215 -msgid "Reset singleplayer world" -msgstr "Reset místního světa" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Disabled" +msgstr "Zakázat balíček" -#: builtin/mainmenu/tab_settings.lua:219 -msgid "GUI scale factor" -msgstr "Měřítko GUI" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:223 -msgid "Scaling factor applied to menu elements: " -msgstr "Měřítko aplikované na prvky menu: " +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Enabled" +msgstr "povoleno" -#: builtin/mainmenu/tab_settings.lua:229 -msgid "Touch free target" -msgstr "Středový kurzor" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:235 -msgid "Touchthreshold (px)" -msgstr "Dosah dotyku (px)" +#: builtin/mainmenu/tab_settings.lua +msgid "Games" +msgstr "Hry" -#: builtin/mainmenu/tab_settings.lua:242 builtin/mainmenu/tab_settings.lua:256 -msgid "Bumpmapping" -msgstr "Bump mapování" +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:244 builtin/mainmenu/tab_settings.lua:257 -msgid "Generate Normalmaps" -msgstr "Generovat normálové mapy" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:246 builtin/mainmenu/tab_settings.lua:258 -msgid "Parallax Occlusion" -msgstr "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:248 builtin/mainmenu/tab_settings.lua:259 -msgid "Waving Water" -msgstr "Vlnění vody" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:250 builtin/mainmenu/tab_settings.lua:260 -msgid "Waving Leaves" -msgstr "Vlnění listů" +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:252 builtin/mainmenu/tab_settings.lua:261 -msgid "Waving Plants" -msgstr "Vlnění rostlin" +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:287 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Pro povolení shaderů musíte používat OpenGL ovladač." +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Vybrat" -#: builtin/mainmenu/tab_settings.lua:398 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Nastavení" -#: builtin/mainmenu/tab_simple_main.lua:79 -msgid "Fly mode" -msgstr "Létací režim" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:83 -msgid "Start Singleplayer" -msgstr "Start místní hry" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:84 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Nastavení modů" -#: builtin/mainmenu/tab_simple_main.lua:203 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "Hlavní nabídka" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Start místní hry" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Hrát" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Místní hra" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Vyberte balíček textur:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Informace nejsou dostupné" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Vyberte balíček textur:" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "Balíčky textur" -#: src/client.cpp:2788 -msgid "Loading textures..." -msgstr "Načítám textury..." +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Chyba spojení (vypršel čas?)" -#: src/client.cpp:2798 -msgid "Rebuilding shaders..." -msgstr "Sestavuji shadery..." - -#: src/client.cpp:2805 -msgid "Initializing nodes..." -msgstr "Inicializuji bloky..." - -#: src/client.cpp:2820 -msgid "Item textures..." -msgstr "Textury věcí..." - -#: src/client.cpp:2845 +#: src/client.cpp msgid "Done!" msgstr "Hotovo!" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Inicializuji bloky" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Vytvářím bloky..." + +#: src/client.cpp +msgid "Item textures..." +msgstr "Textury věcí..." + +#: src/client.cpp +msgid "Loading textures..." +msgstr "Načítám textury..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Sestavuji shadery..." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "Chyba spojení (vypršel čas?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Hru nebylo možné nahrát nebo najít \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Neplatná specifikace hry." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Hlavní nabídka" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "" +"Nebyl vybrán žádný svět a nebyla poskytnuta žádná adresa. Nemám co dělat." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Jméno hráče je příliš dlouhé." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "Uvedená cesta ke světu neexistuje: " + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "no" -#: src/game.cpp:1057 src/guiFormSpecMenu.cpp:2006 -msgid "Proceed" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Pro detaily se podívejte do debug.txt." + +#: src/game.cpp +msgid "Change Keys" +msgstr "Změnit klávesy" + +#: src/game.cpp +msgid "Change Password" +msgstr "Změnit heslo" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Připojuji se k serveru..." + +#: src/game.cpp +msgid "Continue" msgstr "Pokračovat" -#: src/game.cpp:1077 -msgid "You died." -msgstr "Zemřel jsi." +#: src/game.cpp +msgid "Creating client..." +msgstr "Vytvářím klienta..." -#: src/game.cpp:1078 -msgid "Respawn" -msgstr "Znovu stvořit" +#: src/game.cpp +msgid "Creating server..." +msgstr "Vytvářím server..." -#: src/game.cpp:1097 +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Výchozí ovládání:\n" +"- WASD: pohyb\n" +"- Mezera: skákání/šplhání\n" +"- Shift: plížení\n" +"- Q: zahodit věc\n" +"- I: inventář\n" +"- Myš: otáčení,rozhlížení\n" +"- Myš(levé tl.): kopat, štípat\n" +"- Myš(pravé tl.): položit, použít\n" +"- Myš(kolečko): vybrat přihrádku\n" +"- T: chat\n" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -593,626 +685,2974 @@ msgstr "" "- stisk a přesun, klik druhým prstem\n" " --> umístit samostatnou věc do přihrádky\n" -#: src/game.cpp:1111 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" -"Výchozí ovládání:\n" -"- WASD: pohyb\n" -"- Mezera: skákání/šplhání\n" -"- Shift: plížení\n" -"- Q: zahodit věc\n" -"- I: inventář\n" -"- Myš: otáčení,rozhlížení\n" -"- Myš(levé tl.): kopat, štípat\n" -"- Myš(pravé tl.): položit, použít\n" -"- Myš(kolečko): vybrat přihrádku\n" -"- T: chat\n" - -#: src/game.cpp:1130 -msgid "Continue" -msgstr "Pokračovat" - -#: src/game.cpp:1134 -msgid "Change Password" -msgstr "Změnit heslo" - -#: src/game.cpp:1139 -msgid "Sound Volume" -msgstr "Hlasitost" - -#: src/game.cpp:1141 -msgid "Change Keys" -msgstr "Změnit klávesy" - -#: src/game.cpp:1144 +#: src/game.cpp msgid "Exit to Menu" msgstr "Odejít do nabídky" -#: src/game.cpp:1146 +#: src/game.cpp msgid "Exit to OS" msgstr "Ukončit hru" -#: src/game.cpp:1809 -msgid "Shutting down..." -msgstr "Vypínání..." - -#: src/game.cpp:1858 -msgid "Loading..." -msgstr "Nahrávám..." - -#: src/game.cpp:1915 -msgid "Creating server..." -msgstr "Vytvářím server..." - -#: src/game.cpp:1952 -msgid "Creating client..." -msgstr "Vytvářím klienta..." - -#: src/game.cpp:2125 -msgid "Resolving address..." -msgstr "Překládám adresu..." - -#: src/game.cpp:2216 -msgid "Connecting to server..." -msgstr "Připojuji se k serveru..." - -#: src/game.cpp:2274 +#: src/game.cpp msgid "Item definitions..." msgstr "Definice věcí..." -#: src/game.cpp:2279 -msgid "Node definitions..." -msgstr "Definice bloků..." +#: src/game.cpp +msgid "KiB/s" +msgstr "KiB/s" -#: src/game.cpp:2286 +#: src/game.cpp msgid "Media..." msgstr "Média..." -#: src/game.cpp:2291 -msgid " KB/s" -msgstr " KB/s" +#: src/game.cpp +msgid "MiB/s" +msgstr "MiB/s" -#: src/game.cpp:2295 -msgid " MB/s" -msgstr " MB/s" +#: src/game.cpp +msgid "Node definitions..." +msgstr "Definice bloků..." -#: src/game.cpp:4210 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Pro detaily se podívejte do debug.txt." +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Pokračovat" -#: src/guiFormSpecMenu.cpp:2797 +#: src/game.cpp +msgid "Resolving address..." +msgstr "Překládám adresu..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Znovu stvořit" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Vypínání..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Hlasitost" + +#: src/game.cpp +msgid "You died." +msgstr "Zemřel jsi." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "Zadejte " -#: src/guiFormSpecMenu.cpp:2817 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "OK" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "Nastavení kláves (Pokud tohle menu nebude v pořádku, odstraňte nastavení z " -"minetest.conf)" - -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "\"Použít\" = slézt dolů" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Dvojstisk klávesy \"skok\" zapne létání" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "Klávesa je již používána" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "stiskni klávesu" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "Vpřed" - -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "Vzad" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 -msgid "Left" -msgstr "Doleva" - -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Doprava" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Použít" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Skok" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "Plížit se" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "Zahodit" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "Inventář" - -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "Chat" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "Příkaz" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "Konzole" -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "Létání" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Dvojstisk klávesy \"skok\" zapne létání" -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "Turbo" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Zahodit" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "Duch" +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Vpřed" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "Změna dohledu" +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventář" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Skok" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Klávesa je již používána" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" +"Nastavení kláves (Pokud tohle menu nebude v pořádku, odstraňte nastavení z " +"minetest.conf)" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Doleva" + +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Vypsat hromádky" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Staré heslo" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Změna dohledu" -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Nové heslo" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Doprava" -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Potvrdit heslo" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Plížit se" -#: src/guiPasswordChange.cpp:155 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "Plynulý pohyb kamery" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Turbo" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Létání" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Duch" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Použít" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "stiskni klávesu" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Změnit" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Potvrdit heslo" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Nové heslo" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Staré heslo" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Hesla se neshodují!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "Hlasitost: " - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Odejít" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Levé tlačítko myši" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Hlasitost: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Prostřední tlačítko myši" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Pravé tlačítko myši" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "X Tlačítko 1" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "Zpět" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "Vyčistit" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "Vrátit" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tabulátor" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "X Tlačítko 2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Klávesa velkého písmene" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Nabídka" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Pauza" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "Convert" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Esc" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "Změna režimu" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Další" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Předchozí" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Mezerník" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Dolů" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Spustit" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Print Screen" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Vybrat" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Nahoru" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Pomoc" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "Snapshot" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "Levá klávesa Windows" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "Aplikace" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Numerická klávesnice: 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Numerická klávesnice: 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "Pravá klávesa Windows" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Spánek" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Numerická klávesnice: 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Numerická klávesnice: 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Numerická klávesnice: 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Numerická klávesnice: 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Numerická klávesnice: 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Numerická klávesnice: 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Numerická klávesnice: *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Numerická klávesnice: +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Numerická klávesnice: -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Numerická klávesnice: /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Numerická klávesnice: 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Numerická klávesnice: 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Levý Shift" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Pravý Shift" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Levý Control" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Levá klávesa Menu" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Pravý Control" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Pravá klávesa Menu" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Čárka" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "Mínus" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "Tečka" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Plus" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "Zpět" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Klávesa velkého písmene" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Vyčistit" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Čárka" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convert" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "Dolů" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Smazat EOF" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Esc" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "Spustit" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Pomoc" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Levé tlačítko myši" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Levý Control" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Levá klávesa Menu" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Levý Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Levá klávesa Windows" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Nabídka" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Prostřední tlačítko myši" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Mínus" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Změna režimu" + +#: src/keycode.cpp +msgid "Next" +msgstr "Další" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numerická klávesnice: *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numerická klávesnice: +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numerická klávesnice: -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numerická klávesnice: /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numerická klávesnice: 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numerická klávesnice: 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numerická klávesnice: 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numerická klávesnice: 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numerická klávesnice: 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numerická klávesnice: 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numerická klávesnice: 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numerická klávesnice: 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numerická klávesnice: 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numerická klávesnice: 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pauza" + +#: src/keycode.cpp +msgid "Period" +msgstr "Tečka" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plus" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print Screen" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Předchozí" + +#: src/keycode.cpp +msgid "Return" +msgstr "Vrátit" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Pravé tlačítko myši" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Pravý Control" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Pravá klávesa Menu" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Pravý Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Pravá klávesa Windows" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Vybrat" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Spánek" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Snapshot" + +#: src/keycode.cpp +msgid "Space" +msgstr "Mezerník" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tabulátor" + +#: src/keycode.cpp +msgid "Up" +msgstr "Nahoru" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X Tlačítko 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X Tlačítko 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Přiblížení" -#: src/main.cpp:1688 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "3D mraky" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D mode" +msgstr "Létací režim" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Anizotropní filtrování" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Vzad" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Bilineární filtr" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Svázat adresu" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "Bump mapování" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Změnit nastavení kláves" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Změnit nastavení kláves" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Kreativní mód" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Kreativní mód" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "3D mraky" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" msgstr "Hlavní nabídka" -#: src/main.cpp:1726 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Příkaz" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Propojené sklo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Připojuji se k serveru..." + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Konzole" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Konzole" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Konzole" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Control" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Povolit poškození" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default game" +msgstr "upravit hru" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Nové heslo" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Povolit částice" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "Dvojstisk klávesy \"skok\" zapne létání" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "Dvojstisk klávesy \"skok\" zapne létání" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "Online repozitář modů" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Povolit poškození" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "no" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Žádný filtr" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fly key" +msgstr "Létací režim" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Vpřed" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "GUI scaling filter" +msgstr "Měřítko GUI" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Generate normalmaps" +msgstr "Generovat normálové mapy" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Zakázat balíček" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "povoleno" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Hra" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Inventář" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Skok" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Levá klávesa Menu" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Hlavní nabídka" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Hlavní nabídka" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Generátor mapy" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Generátor mapy" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Generátor mapy" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Generátor mapy" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Generátor mapy" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Generátor mapy" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Nabídka" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Mip-Mapování" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Node highlighting" +msgstr "Zvýraznění bloků" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion Scale" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion bias" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion iterations" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion mode" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion strength" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Player name" msgstr "Jméno hráče je příliš dlouhé." -#: src/main.cpp:1764 -msgid "Connection error (timed out?)" -msgstr "Chyba spojení (vypršel čas?)" +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" -#: src/main.cpp:1929 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Nebyl vybrán žádný svět a nebyla poskytnuta žádná adresa. Nemám co dělat." +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" -#: src/main.cpp:1936 -msgid "Provided world path doesn't exist: " -msgstr "Uvedená cesta ke světu neexistuje: " +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" -#: src/main.cpp:1945 -msgid "Could not find or load game \"" -msgstr "Hru nebylo možné nahrát nebo najít \"" +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" -#: src/main.cpp:1963 -msgid "Invalid gamespec." -msgstr "Neplatná specifikace hry." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Načítám textury..." -msgid "Downloading" -msgstr "Stahuji" +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" -#~ msgid "Game Name" -#~ msgstr "Název hry" +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Nepovedlo se zkopírovat mod \"$1\" do hry \"$2\"" +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" -#~ msgid "GAMES" -#~ msgstr "HRY" +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" -#~ msgid "Games" -#~ msgstr "Hry" +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" -#~ msgid "Mods:" -#~ msgstr "Mody:" +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" -#~ msgid "edit game" -#~ msgstr "upravit hru" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Změna dohledu" -#~ msgid "new game" -#~ msgstr "nová hra" +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" -#~ msgid "EDIT GAME" -#~ msgstr "UPRAVIT HRU" +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" -#~ msgid "Remove selected mod" -#~ msgstr "Odstranit vybraný mod" +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Přidat mod" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Pravá klávesa Menu" -#~ msgid "CLIENT" -#~ msgstr "KLIENT" +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" -#~ msgid "Favorites:" -#~ msgstr "Oblíbené:" +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" -#~ msgid "START SERVER" -#~ msgstr "MÍSTNÍ SERVER" +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" -#~ msgid "Name" -#~ msgstr "Jméno" +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" -#~ msgid "Password" -#~ msgstr "Heslo" +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" -#~ msgid "SETTINGS" -#~ msgstr "NASTAVENÍ" +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" -#~ msgid "Preload item visuals" -#~ msgstr "Přednačíst textury předmětů" +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" -#~ msgid "Finite Liquid" -#~ msgstr "Konečná voda" +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" -#~ msgid "SINGLE PLAYER" -#~ msgstr "HRA JEDNOHO HRÁČE" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Snapshot" -#~ msgid "TEXTURE PACKS" -#~ msgstr "BALÍČKY TEXTUR" +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" -#~ msgid "MODS" -#~ msgstr "MODY" +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" -#~ msgid "Add mod:" -#~ msgstr "Přidat mod:" +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Start místní hry" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Port serveru" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "Port serveru" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Port serveru" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Seznam veřejných serverů" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Seznam veřejných serverů" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Shadery" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Plynulé osvětlení" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Plížit se" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of generated normalmaps." +msgstr "Generovat normálové mapy" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Balíčky textur" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Trilineární filtr" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "stiskni klávesu" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Bývalí klíčoví vývojáři" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Hlasitost" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Walking speed" +msgstr "Vlnění listů" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving Nodes" +msgstr "Vlnění listů" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Vlnění listů" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving plants" +msgstr "Vlnění rostlin" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water" +msgstr "Vlnění vody" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water height" +msgstr "Vlnění vody" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water length" +msgstr "Vlnění vody" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water speed" +msgstr "Vlnění vody" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Rendering:" +#~ msgstr "Renderování:" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Aby se změna ovladače projevila, restartujte Minetest" + +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "" +#~ "Levý klik: Přesunout všechny předměty, Pravý klik: Přesunout jeden předmět" #~ msgid "Local install" #~ msgstr "Místní instalace" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Levý klik: Přesunout všechny předměty, Pravý klik: Přesunout jeden předmět" +#~ msgid "Add mod:" +#~ msgstr "Přidat mod:" -#~ msgid "Anisotropic Filtering" -#~ msgstr "Anizotropní filtrování" +#~ msgid "MODS" +#~ msgstr "MODY" -#~ msgid "Mip-Mapping" -#~ msgstr "Mip-Mapování" +#~ msgid "TEXTURE PACKS" +#~ msgstr "BALÍČKY TEXTUR" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "HRA JEDNOHO HRÁČE" + +#~ msgid "Finite Liquid" +#~ msgstr "Konečná voda" + +#~ msgid "Preload item visuals" +#~ msgstr "Přednačíst textury předmětů" + +#~ msgid "SETTINGS" +#~ msgstr "NASTAVENÍ" + +#~ msgid "Password" +#~ msgstr "Heslo" + +#~ msgid "Name" +#~ msgstr "Jméno" + +#~ msgid "START SERVER" +#~ msgstr "MÍSTNÍ SERVER" + +#~ msgid "Favorites:" +#~ msgstr "Oblíbené:" + +#~ msgid "CLIENT" +#~ msgstr "KLIENT" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Přidat mod" + +#~ msgid "Remove selected mod" +#~ msgstr "Odstranit vybraný mod" + +#~ msgid "EDIT GAME" +#~ msgstr "UPRAVIT HRU" + +#~ msgid "new game" +#~ msgstr "nová hra" + +#~ msgid "Mods:" +#~ msgstr "Mody:" + +#~ msgid "GAMES" +#~ msgstr "HRY" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Nepovedlo se zkopírovat mod \"$1\" do hry \"$2\"" + +#~ msgid "Game Name" +#~ msgstr "Název hry" + +#~ msgid "Downloading" +#~ msgstr "Stahuji" + +#~ msgid " MB/s" +#~ msgstr " MB/s" + +#~ msgid " KB/s" +#~ msgstr " KB/s" + +#~ msgid "Touchthreshold (px)" +#~ msgstr "Dosah dotyku (px)" + +#~ msgid "Touch free target" +#~ msgstr "Středový kurzor" + +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Pro povolení shaderů musíte používat OpenGL ovladač." + +#~ msgid "Texturing:" +#~ msgstr "Texturování:" + +#~ msgid "Simple Leaves" +#~ msgstr "Jednoduché listí" + +#~ msgid "Scaling factor applied to menu elements: " +#~ msgstr "Měřítko aplikované na prvky menu: " + +#~ msgid "Reset singleplayer world" +#~ msgstr "Reset místního světa" + +#~ msgid "Opaque Water" +#~ msgstr "Neprůhledná voda" + +#~ msgid "Opaque Leaves" +#~ msgstr "Neprůhledné listí" + +#~ msgid "No!!!" +#~ msgstr "Ne!!!" + +#~ msgid "No Mipmap" +#~ msgstr "Žádné Mipmapy" + +#~ msgid "Mipmap + Aniso. Filter" +#~ msgstr "Mipmapa + Anizo. filtr" + +#~ msgid "Mipmap" +#~ msgstr "Mipmapa" + +#~ msgid "Fancy Leaves" +#~ msgstr "Vícevrstevné listí" + +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr "Jste si jisti, že chcete resetovat místní svět?" diff --git a/po/da/minetest.po b/po/da/minetest.po index 35bce6c9..52d2349f 100644 --- a/po/da/minetest.po +++ b/po/da/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" "PO-Revision-Date: 2013-02-17 00:41+0200\n" "Last-Translator: Rune Biskopstö Christensen \n" "Language-Team: \n" @@ -18,541 +18,603 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Weblate 1.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Hovedmenu" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/fstk/ui.lua #, fuzzy -msgid "World:" -msgstr "Vælg verden:" +msgid "Reconnect" +msgstr "Forbind" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -#, fuzzy -msgid "Hide Game" -msgstr "Spil" - -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Cancel" +msgstr "Anuller" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Depends:" msgstr "afhænger af:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Gem" - -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 -msgid "Cancel" -msgstr "Anuller" - -#: builtin/mainmenu/dlg_config_world.lua:68 -#, fuzzy -msgid "Enable MP" -msgstr "Aktivér alle" - -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Disable MP" msgstr "Deaktivér alle" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "aktiveret" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Enable MP" +msgstr "Aktivér alle" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Enable all" msgstr "Aktivér alle" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Verdens navn" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Hide Game" msgstr "Spil" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Skab" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Gem" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "World:" +msgstr "Vælg verden:" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "aktiveret" + +#: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "A world named \"$1\" already exists" msgstr "Kan ikke skabe verden: en verden med dette navn eksisterer allerede" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Skab" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Spil" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Verdens navn" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "Ja" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Ja" + +#: builtin/mainmenu/dlg_delete_world.lua #, fuzzy msgid "Delete World \"$1\"?" msgstr "Slet verden" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Nej" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Accepter" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "Failed to install $1 to $2" msgstr "Mislykkedes i at initialisere verden" -#: builtin/mainmenu/modmgr.lua:366 -msgid "Install Mod: unable to find suitable foldername for modpack $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua +msgid "Close store" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Ned" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Verdens navn" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:476 -msgid "Rating" +#: builtin/mainmenu/store.lua +msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "" - -#: builtin/mainmenu/store.lua:522 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:530 -msgid "Page $1 of $2" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Skabt af" - -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Skabt af" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:93 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua +msgid "Mods" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Rename" msgstr "" -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:121 +#: builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Select Mod File:" msgstr "Vælg verden:" -#: builtin/mainmenu/tab_mods.lua:165 -msgid "Mods" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Address / Port :" msgstr "Adresse/port" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Navn/kodeord" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Slet" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Forbind" - -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Ny" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Forbind" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Creative mode" +msgstr "Kreativ tilstand" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Damage enabled" +msgstr "aktiveret" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Slet" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Navn/kodeord" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "PvP enabled" +msgstr "aktiveret" + +#: builtin/mainmenu/tab_server.lua +msgid "Bind Address" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Configure" msgstr "Konfigurér" -#: builtin/mainmenu/tab_server.lua:29 -#, fuzzy -msgid "Start Game" -msgstr "Start spil / Forbind" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Vælg verden:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Creative Mode" msgstr "Kreativ tilstand" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Enable Damage" msgstr "Aktivér skade" -#: builtin/mainmenu/tab_server.lua:35 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Navn/kodeord" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Ny" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua #, fuzzy msgid "Public" msgstr "Vis offentlig" -#: builtin/mainmenu/tab_server.lua:45 -msgid "Bind Address" -msgstr "" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Vælg verden:" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" +#: builtin/mainmenu/tab_server.lua +#, fuzzy +msgid "Start Game" +msgstr "Start spil / Forbind" + +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" -msgstr "Glat belysning" - -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" -msgstr "Aktivér partikler" - -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" -msgstr "3D skyer" - -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "\"Smarte\" træer" - -#: builtin/mainmenu/tab_settings.lua:142 -#, fuzzy -msgid "Opaque Water" -msgstr "Opakt (uigennemsigtigt) vand" - -#: builtin/mainmenu/tab_settings.lua:144 -#, fuzzy -msgid "Connected Glass" -msgstr "Forbind" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-mapping" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Anisotropisk filtréring" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Bi-lineær filtréring" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Tri-lineær filtréring" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "Shadere" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Skift bindinger" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Reset singleplayer world" -msgstr "Enligspiller" +msgid "Disabled" +msgstr "Deaktivér alle" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Bumpmapping" -msgstr "Mip-mapping" +msgid "Enabled" +msgstr "aktiveret" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Games" +msgstr "Spil" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Vælg" + +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Indstillinger" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Enligspiller" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Konfigurér" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Hovedmenu" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Enligspiller" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Afspil" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Enligspiller" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "" -#: src/client.cpp:2726 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Forbindelses fejl (udløbelse af tidsfrist?)" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp msgid "Item textures..." msgstr "" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "Forbindelses fejl (udløbelse af tidsfrist?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Kunne ikke finde eller indlæse spil \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Ugyldig spilspecifikationer." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Hovedmenu" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Ingen verden valgt og ingen adresse angivet. Ingen opgave at lave." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "Genopstå" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "" - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." @@ -560,503 +622,2908 @@ msgstr "" "\n" "Tjek debug.txt for detaljer." -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Skift bindinger" + +#: src/game.cpp +msgid "Change Password" +msgstr "Skift kodeord" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp +msgid "Continue" +msgstr "Fortsæt" + +#: src/game.cpp +msgid "Creating client..." +msgstr "" + +#: src/game.cpp +msgid "Creating server..." +msgstr "" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "Afslut til menu" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "Afslut til operativsystemet" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "" + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Fortsæt" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp +msgid "Respawn" +msgstr "Genopstå" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp +msgid "You died." +msgstr "Du døde." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +#: src/guiFormSpecMenu.cpp +msgid "ok" msgstr "" -"Tastebindinger. (Hvis denne menu fucker op, fjern elementer fra minetest." -"conf)" -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "\"Brug\" = klatre ned" -#: src/guiKeyChangeMenu.cpp:180 +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Baglæns" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Snak" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Kommando" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Konsol" + +#: src/guiKeyChangeMenu.cpp msgid "Double tap \"jump\" to toggle fly" msgstr "" "Tryk på \"hop\" hurtigt to gange for at skifte frem og tilbage mellem flyve-" "tilstand" -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "Tast allerede i brug" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "Tryk på en tast" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "Fremad" - -#: src/guiKeyChangeMenu.cpp:398 -msgid "Backward" -msgstr "Baglæns" - -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 -msgid "Left" -msgstr "Venstre" - -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Højre" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Brug" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Hop" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "Snige" - -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp msgid "Drop" msgstr "Slip" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Fremad" + +#: src/guiKeyChangeMenu.cpp msgid "Inventory" msgstr "Beholdning" -#: src/guiKeyChangeMenu.cpp:406 -msgid "Chat" -msgstr "Snak" +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Hop" -#: src/guiKeyChangeMenu.cpp:407 -msgid "Command" -msgstr "Kommando" +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Tast allerede i brug" -#: src/guiKeyChangeMenu.cpp:408 -msgid "Console" -msgstr "Konsol" +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" +"Tastebindinger. (Hvis denne menu fucker op, fjern elementer fra minetest." +"conf)" -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "Omstil flyvning" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Venstre" -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "Omstil hurtig" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "Omstil fylde" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "Afstands vælg" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Udskriv stakke" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" -msgstr "Gammelt kodeord" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Afstands vælg" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" -msgstr "Nyt kodeord" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Højre" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" -msgstr "Bekræft kodeord" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Snige" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Omstil hurtig" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Omstil hurtig" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Omstil flyvning" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Omstil fylde" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Brug" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "Tryk på en tast" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Skift" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Bekræft kodeord" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Nyt kodeord" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Gammelt kodeord" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Kodeordene er ikke ens!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "" - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Venstre knap" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "" -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Midterste knap" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Højre knap" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "X knap 1" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "Tilbage" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "Ryd" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "Enter" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tabulator" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "X knap 2" - -#: src/keycode.cpp:226 -#, fuzzy -msgid "Capital" -msgstr "Store bogstaver" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Menu" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Pause" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "Konvertér" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Escape" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Endelig" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "Tilstandsskift" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Næste" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Foregående" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Mellemrum" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Ned" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Eksekvér" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Udskriv" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Vælg" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Op" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Hjælp" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:230 -#, fuzzy -msgid "Snapshot" -msgstr "Tilstandsbillede" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "Venstre meta" - -#: src/keycode.cpp:234 +#: src/keycode.cpp #, fuzzy msgid "Apps" msgstr "Applikationer" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "Højre meta" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Sov" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Numpad *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Venstre Skift" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Højre Skift" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Venstre Control" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Venstre Menu" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Højre Control" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Højre Menu" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Komma" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "Minus" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "Punktum" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Plus" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "Giv agt" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "Tilbage" + +#: src/keycode.cpp +#, fuzzy +msgid "Capital" +msgstr "Store bogstaver" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Ryd" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Komma" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Konvertér" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "Ned" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Udvisk Slut-På-Fil" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "Eksekvér" + +#: src/keycode.cpp +msgid "Final" +msgstr "Endelig" + +#: src/keycode.cpp +msgid "Help" +msgstr "Hjælp" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Venstre knap" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Venstre Control" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Venstre Menu" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Venstre Skift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Venstre meta" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menu" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Midterste knap" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Minus" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Tilstandsskift" + +#: src/keycode.cpp +msgid "Next" +msgstr "Næste" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numpad *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numpad +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numpad -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numpad /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Ryd" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pause" + +#: src/keycode.cpp +msgid "Period" +msgstr "Punktum" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plus" + +#: src/keycode.cpp +msgid "Print" +msgstr "Udskriv" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Foregående" + +#: src/keycode.cpp +msgid "Return" +msgstr "Enter" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Højre knap" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Højre Control" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Højre Menu" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Højre Skift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Højre meta" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Vælg" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Sov" + +#: src/keycode.cpp +#, fuzzy +msgid "Snapshot" +msgstr "Tilstandsbillede" + +#: src/keycode.cpp +msgid "Space" +msgstr "Mellemrum" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tabulator" + +#: src/keycode.cpp +msgid "Up" +msgstr "Op" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X knap 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X knap 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "3D skyer" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "Avanceret" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Anisotropisk filtréring" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Baglæns" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Bi-lineær filtréring" + +#: src/settings_translation_file.cpp +msgid "Bind address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Build inside player" +msgstr "Flerspiller" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bumpmapping" +msgstr "Mip-mapping" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Skift bindinger" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Skift bindinger" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Kreativ tilstand" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Kreativ tilstand" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "3D skyer" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" msgstr "Hovedmenu" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "Colored fog" msgstr "" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Forbindelses fejl (udløbelse af tidsfrist?)" - -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Ingen verden valgt og ingen adresse angivet. Ingen opgave at lave." - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Kunne ikke finde eller indlæse spil \"" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Kommando" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Ugyldig spilspecifikationer." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Forbind" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Venstre klik: flyt alle enheder. Højre klik: flyt en enkelt enhed" +#: src/settings_translation_file.cpp +msgid "Connect to external media server" +msgstr "" -#~ msgid "is required by:" -#~ msgstr "er påkrævet af:" +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" -#~ msgid "Configuration saved. " -#~ msgstr "Konfiguration gemt. " +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Konsol" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Advarsel: konfigurationen er ikke sammenhængende. " +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Konsol" -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Kan ikke skabe verden: navnet indeholder ugyldige bogstaver" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Konsol" -#~ msgid "Multiplayer" -#~ msgstr "Flerspiller" +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" -#~ msgid "Advanced" -#~ msgstr "Avanceret" +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" -#~ msgid "Show Public" -#~ msgstr "Vis offentlig" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Control" -#~ msgid "Show Favorites" +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Aktivér skade" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Nyt kodeord" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Aktivér partikler" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "" +"Tryk på \"hop\" hurtigt to gange for at skifte frem og tilbage mellem flyve-" +"tilstand" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "" +"Tryk på \"hop\" hurtigt to gange for at skifte frem og tilbage mellem flyve-" +"tilstand" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Aktivér skade" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Anisotropisk filtréring" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Fremad" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Deaktivér alle" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "aktiveret" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Spil" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Beholdning" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Hop" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Venstre Menu" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Hovedmenu" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Hovedmenu" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Menu" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Mip-mapping" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion Scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Preload inventory textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Afstands vælg" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Højre Menu" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Tilstandsbillede" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Enligspiller" + +#: src/settings_translation_file.cpp +msgid "Server URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Shadere" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Glat belysning" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Snige" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Texture path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Tri-lineær filtréring" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "Tryk på en tast" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "\"Smarte\" træer" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#, fuzzy +#~ msgid "Game Name" +#~ msgstr "Spil" + +#, fuzzy +#~ msgid "Favorites:" #~ msgstr "Vis favoritter" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Lad adresse-feltet være tomt for at starte en lokal server." +#, fuzzy +#~ msgid "Password" +#~ msgstr "Gammelt kodeord" -#~ msgid "Create world" -#~ msgstr "Skab verden" +#~ msgid "Preload item visuals" +#~ msgstr "For-indlæs elementernes grafik" -#~ msgid "Address required." -#~ msgstr "Adresse påkrævet." +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Advarsel: nogle modifikationer er endnu ikke konfigureret.\n" +#~ "De vil blive aktiveret som standard når du gemmer konfigurationen. " -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Kan ikke slette verden: ingenting valgt" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Advarsel: nogle konfigurerede modifikationer mangler.\n" +#~ "Deres indstillinger vil blive fjernet når du gemmer konfigurationen. " -#~ msgid "Files to be deleted" -#~ msgstr "Filer som slettes" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Kan ikke skabe verden: ingen spil fundet" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Kan ikke konfigurere verden: ingenting valgt" - -#~ msgid "Failed to delete all world files" -#~ msgstr "Mislykkedes i at slette alle verdenens filer" +#~ msgid "Delete map" +#~ msgstr "Slet mappen" #~ msgid "" #~ "Default Controls:\n" @@ -1083,53 +3550,63 @@ msgstr "Ugyldig spilspecifikationer." #~ "- ESC: denne menu\n" #~ "- T: snak\n" -#~ msgid "Delete map" -#~ msgstr "Slet mappen" +#~ msgid "Failed to delete all world files" +#~ msgstr "Mislykkedes i at slette alle verdenens filer" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Advarsel: nogle konfigurerede modifikationer mangler.\n" -#~ "Deres indstillinger vil blive fjernet når du gemmer konfigurationen. " +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Kan ikke konfigurere verden: ingenting valgt" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Advarsel: nogle modifikationer er endnu ikke konfigureret.\n" -#~ "De vil blive aktiveret som standard når du gemmer konfigurationen. " +#~ msgid "Cannot create world: No games found" +#~ msgstr "Kan ikke skabe verden: ingen spil fundet" -#~ msgid "Exit to OS" -#~ msgstr "Afslut til operativsystemet" +#~ msgid "Files to be deleted" +#~ msgstr "Filer som slettes" -#~ msgid "Exit to Menu" -#~ msgstr "Afslut til menu" +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Kan ikke slette verden: ingenting valgt" -#~ msgid "Change Password" -#~ msgstr "Skift kodeord" +#~ msgid "Address required." +#~ msgstr "Adresse påkrævet." -#~ msgid "Continue" -#~ msgstr "Fortsæt" +#~ msgid "Create world" +#~ msgstr "Skab verden" -#~ msgid "You died." -#~ msgstr "Du døde." +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Lad adresse-feltet være tomt for at starte en lokal server." -#~ msgid "Preload item visuals" -#~ msgstr "For-indlæs elementernes grafik" - -#, fuzzy -#~ msgid "Password" -#~ msgstr "Gammelt kodeord" - -#, fuzzy -#~ msgid "Favorites:" +#~ msgid "Show Favorites" #~ msgstr "Vis favoritter" -#, fuzzy -#~ msgid "Games" -#~ msgstr "Spil" +#~ msgid "Show Public" +#~ msgstr "Vis offentlig" + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Kan ikke skabe verden: navnet indeholder ugyldige bogstaver" + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Advarsel: konfigurationen er ikke sammenhængende. " + +#~ msgid "Configuration saved. " +#~ msgstr "Konfiguration gemt. " + +#~ msgid "is required by:" +#~ msgstr "er påkrævet af:" + +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Venstre klik: flyt alle enheder. Højre klik: flyt en enkelt enhed" #, fuzzy -#~ msgid "Game Name" -#~ msgstr "Spil" +#~ msgid "Downloading" +#~ msgstr "Ned" + +#, fuzzy +#~ msgid "Reset singleplayer world" +#~ msgstr "Enligspiller" + +#, fuzzy +#~ msgid "Opaque Water" +#~ msgstr "Opakt (uigennemsigtigt) vand" + +#, fuzzy +#~ msgid "Opaque Leaves" +#~ msgstr "Opakt (uigennemsigtigt) vand" diff --git a/po/de/minetest.po b/po/de/minetest.po index 4df3be6d..2d157c67 100644 --- a/po/de/minetest.po +++ b/po/de/minetest.po @@ -7,160 +7,211 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-14 16:32+0100\n" -"PO-Revision-Date: 2015-03-16 15:50+0100\n" -"Last-Translator: Wuzzy \n" -"Language-Team: Deutsch <>\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-10-05 02:00+0200\n" +"Last-Translator: est31 \n" +"Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Poedit 1.7.1\n" +"X-Generator: Weblate 2.5-dev\n" -#: builtin/fstk/ui.lua:67 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "Es ist ein Fehler in einem Lua-Skript aufgetreten, z.b in einem Mod:" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "Es ist ein Fehler aufgetreten:" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "Hauptmenü" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "OK" -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "Welt:" +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "Erneut verbinden" -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "Spiel verstecken" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "Der Server hat um eine Wiederverbindung gebeten:" -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "MP-Mods verstecken" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Lädt…" -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "Mod:" +#: builtin/mainmenu/common.lua +#, fuzzy +msgid "Protocol version mismatch. " +msgstr "Serverprotokollversionsfehler " -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Abhängig von:" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:192 -msgid "Save" -msgstr "Speichern" +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:200 -#: src/keycode.cpp:224 +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" +"Versuche die Öffentliche Serverliste neu zu laden bzw. prüfe deine " +"Internetverbindung." + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "Abbrechen" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "MP aktivieren" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Abhängig von:" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "MP deaktivieren" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" -msgstr "Aktiviert" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "MP aktivieren" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Alle an" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Weltname" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" +"Fehler beim aktivieren der Mod \"$1\": Ungültiger Name. Nur folgende Zeichen " +"sind erlaubt: [a-z0-9_]." -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Spiel ausblenden" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Weltgenerator" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Modpacks verstecken" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Spiel" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Modifikation:" -#: builtin/mainmenu/dlg_create_world.lua:63 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Speichern" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Welt:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "Aktiviert" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "Eine Welt mit dem Namen „$1“ existiert bereits" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Erstellen" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "Keine Spiele installiert." - -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "Spiele können von minetest.net heruntergeladen werden" - -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "Warnung: Die minimale Testversion ist für Entwickler gedacht." - -#: builtin/mainmenu/dlg_create_world.lua:73 +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" "Andere Spiele (wie minetest_game) können von minetest.net heruntergeladen " "werden" -#: builtin/mainmenu/dlg_create_world.lua:99 -msgid "A world named \"$1\" already exists" -msgstr "Eine Welt namens „$1“ existiert bereits" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Spiele können von minetest.net heruntergeladen werden" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Spiel" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Weltgenerator" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Kein Weltname gegeben oder kein Spiel ausgewählt" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Seed" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "Warnung: Die minimale Testversion ist für Entwickler gedacht." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Weltname" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Keine Spiele installiert." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" -msgstr "„$1“ wirklich löschen?" +msgstr "Bist du sicher, dass du \"$1\" wirklich löschen möchtest?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:79 -msgid "Yes" -msgstr "Ja" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Nein, natürlich nicht!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: Fehler beim Löschen von „$1“" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: Unzulässiger Modpfad „$1“" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Nein, natürlich nicht!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Ja" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Welt „$1“ löschen?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Nein" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Modpack umbenennen:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Annehmen" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" -msgstr "Mod installieren: Datei: „$1“" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Modpack umbenennen:" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -168,437 +219,447 @@ msgstr "" "\n" "Mod installieren: Nicht unterstützter Dateityp „$1“ oder fehlerhaftes Archiv" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Fehler bei der Installation von $1 nach $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Mod installieren: Datei: „$1“" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Mod installieren: Echter Modname für $1 konnte nicht gefunden werden" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Mod installieren: Geeigneter Ordnername für Modpack $1 konnte nicht gefunden " "werden" -#: builtin/mainmenu/modmgr.lua:386 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Mod installieren: Echter Modname für $1 konnte nicht gefunden werden" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "Unsortiert" - -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "Suchen" - -#: builtin/mainmenu/store.lua:126 -msgid "Downloading $1, please wait..." -msgstr "$1 wird heruntergeladen, bitte warten ..." - -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "Erfolgreich installiert:" - -#: builtin/mainmenu/store.lua:162 -msgid "Shortname:" -msgstr "Kurzname:" - -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Bewertung" - -#: builtin/mainmenu/store.lua:497 -msgid "re-Install" -msgstr "Erneut installieren" - -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Installieren" - -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "Schließen" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "$1 wird heruntergeladen, bitte warten ..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Installieren" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "Seite $1 von $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Mitwirkende" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Bewertung" -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "Hauptentwickler" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Suchen" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Kurzname:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Erfolgreich installiert:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Unsortiert" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Erneut installieren" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Aktive Mitwirkende" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Hauptentwickler" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Mitwirkende" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Frühere Mitwirkende" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Ehemalige Hauptentwickler" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Installierte Mods:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Online-Mod-Archiv" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Keine Modbeschreibung verfügbar" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Modinformation:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Umbenennen" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Ausgewähltes Modpack deinstallieren" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Ausgewählte Mod deinstallieren" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Mod-Datei auswählen:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "Mods" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Keine Modbeschreibung verfügbar" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Umbenennen" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Mod-Datei auswählen:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Ausgewählte Mod deinstallieren" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Ausgewähltes Modpack deinstallieren" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "Adresse/Port:" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" -msgstr "Name/Passwort:" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Öffentliche Serverliste" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Entfernen" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Verbinden" - -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 -msgid "Creative mode" -msgstr "Kreativmodus" - -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 -msgid "Damage enabled" -msgstr "Schaden aktiviert" - -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 -msgid "PvP enabled" -msgstr "Spielerkampf aktiviert" - -#: builtin/mainmenu/tab_multiplayer.lua:257 +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "Client" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Neu" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Verbinden" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -msgid "Configure" -msgstr "Konfigurieren" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Spiel starten" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Welt wählen:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" msgstr "Kreativmodus" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" -msgstr "Schaden einschalten" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Schaden aktiviert" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Öffentlich" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Entfernen" -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Name/Passwort" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Name/Passwort:" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Öffentliche Serverliste" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "Spielerkampf aktiviert" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "Bind-Adresse" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Konfigurieren" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Kreativmodus" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Schaden einschalten" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Name/Passwort" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Neu" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "Kein Weltname angegeben oder kein Spiel ausgewählt!" + +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "Port" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Serverport" +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Öffentlich" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Welt wählen:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Server" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "No Filter" -msgstr "Kein Filter" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Serverport" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Bilinear Filter" -msgstr "Bilinearer Filter" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Spiel starten" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Trilinear Filter" -msgstr "Trilinearer Filter" +#: builtin/mainmenu/tab_settings.lua +msgid "\"" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Mipmap" -msgstr "Keine Mipmap" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Mipmap" -msgstr "Mipmap" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Mipmap + Aniso. Filter" -msgstr "Mipmap u. Aniso. Filter" - -#: builtin/mainmenu/tab_settings.lua:77 -msgid "Are you sure to reset your singleplayer world?" -msgstr "Sind Sie sicher, dass Sie die Einzelspielerwelt löschen wollen?" - -#: builtin/mainmenu/tab_settings.lua:81 -msgid "No!!!" -msgstr "Nein!!!" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Smooth Lighting" -msgstr "Besseres Licht" - -#: builtin/mainmenu/tab_settings.lua:183 -msgid "Enable Particles" -msgstr "Partikel aktivieren" - -#: builtin/mainmenu/tab_settings.lua:185 -msgid "3D Clouds" -msgstr "3D-Wolken" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Fancy Trees" -msgstr "Schöne Bäume" - -#: builtin/mainmenu/tab_settings.lua:189 -msgid "Opaque Water" -msgstr "Undurchs. Wasser" - -#: builtin/mainmenu/tab_settings.lua:191 -msgid "Connected Glass" -msgstr "Verbundenes Glas" - -#: builtin/mainmenu/tab_settings.lua:193 -msgid "Node Highlighting" -msgstr "Blöcke hervorheben" - -#: builtin/mainmenu/tab_settings.lua:196 -msgid "Texturing:" -msgstr "Texturierung:" - -#: builtin/mainmenu/tab_settings.lua:201 -msgid "Rendering:" -msgstr "Rendering:" - -#: builtin/mainmenu/tab_settings.lua:205 -msgid "Restart minetest for driver change to take effect" -msgstr "Neustart nach Ändern des Treibers erforderlich" - -#: builtin/mainmenu/tab_settings.lua:207 -msgid "Shaders" -msgstr "Shader" - -#: builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Tasten ändern" -#: builtin/mainmenu/tab_settings.lua:215 -msgid "Reset singleplayer world" -msgstr "Einzelspielerwelt zurücksetzen" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Disabled" +msgstr "MP deaktivieren" -#: builtin/mainmenu/tab_settings.lua:219 -msgid "GUI scale factor" -msgstr "GUI-Skalierfaktor" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:223 -msgid "Scaling factor applied to menu elements: " -msgstr "Auf Menüelemente angewandter Skalierfaktor: " +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Enabled" +msgstr "Aktiviert" -#: builtin/mainmenu/tab_settings.lua:229 -msgid "Touch free target" -msgstr "Berührungsfreies Ziel" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:235 -msgid "Touchthreshold (px)" -msgstr "Berührungsempfindlichkeit (px)" +#: builtin/mainmenu/tab_settings.lua +msgid "Games" +msgstr "Spiele" -#: builtin/mainmenu/tab_settings.lua:242 builtin/mainmenu/tab_settings.lua:256 -msgid "Bumpmapping" -msgstr "Bumpmapping" +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:244 builtin/mainmenu/tab_settings.lua:257 -msgid "Generate Normalmaps" -msgstr "Normalmaps generieren" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:246 builtin/mainmenu/tab_settings.lua:258 -msgid "Parallax Occlusion" -msgstr "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:248 builtin/mainmenu/tab_settings.lua:259 -msgid "Waving Water" -msgstr "Wasserwellen" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:250 builtin/mainmenu/tab_settings.lua:260 -msgid "Waving Leaves" -msgstr "Wehende Blätter" +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:252 builtin/mainmenu/tab_settings.lua:261 -msgid "Waving Plants" -msgstr "Wogende Pflanzen" +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:287 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Um Shader zu benutzen, muss der OpenGL-Treiber benutzt werden." +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Auswählen" -#: builtin/mainmenu/tab_settings.lua:398 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Einstellungen" -#: builtin/mainmenu/tab_simple_main.lua:80 -msgid "Fly mode" -msgstr "Flugmodus" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:84 -msgid "Start Singleplayer" -msgstr "Einzelspieler starten" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:85 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Mods konfigurieren" -#: builtin/mainmenu/tab_simple_main.lua:208 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "Hauptmenü" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Einzelspieler starten" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Spielen" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Einzelspieler" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Texturpaket auswählen:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Keine Informationen vorhanden" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "Keine" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Texturpaket auswählen:" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "Texturpakete" -#: src/client.cpp:1563 -msgid "Loading textures..." -msgstr "Texturen laden ..." +#: src/client.cpp +msgid "Connection timed out." +msgstr "Verbindungsfehler, Zeitüberschreitung." -#: src/client.cpp:1573 -msgid "Rebuilding shaders..." -msgstr "Shader wiederherstellen ..." - -#: src/client.cpp:1580 -msgid "Initializing nodes..." -msgstr "Blöcke initialisieren ..." - -#: src/client.cpp:1595 -msgid "Item textures..." -msgstr "Inventarbilder ..." - -#: src/client.cpp:1620 +#: src/client.cpp msgid "Done!" msgstr "Fertig!" -#: src/client/clientlauncher.cpp:172 -msgid "Main Menu" -msgstr "Hauptmenü" +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Blöcke initialisieren" -#: src/client/clientlauncher.cpp:210 -msgid "Player name too long." -msgstr "Spielername zu lang." +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Blöcke initialisieren ..." -#: src/client/clientlauncher.cpp:248 +#: src/client.cpp +msgid "Item textures..." +msgstr "Inventarbilder ..." + +#: src/client.cpp +msgid "Loading textures..." +msgstr "Texturen laden ..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Shader wiederherstellen ..." + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Verbindungsfehler (Zeitüberschreitung?)" -#: src/client/clientlauncher.cpp:413 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Keine Welt ausgewählt und keine Adresse angegeben. Nichts zu tun." - -#: src/client/clientlauncher.cpp:420 -msgid "Provided world path doesn't exist: " -msgstr "Angegebener Weltpfad existiert nicht: " - -#: src/client/clientlauncher.cpp:429 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "Kann Spiel nicht finden/laden \"" -#: src/client/clientlauncher.cpp:447 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "Ungültige Spielspezif." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Hauptmenü" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Keine Welt ausgewählt und keine Adresse angegeben. Nichts zu tun." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Spielername zu lang." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "Angegebener Weltpfad existiert nicht: " + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "no" -#: src/game.cpp:1061 src/guiFormSpecMenu.cpp:2008 -msgid "Proceed" -msgstr "Fortsetzen" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Siehe debug.txt für Details." -#: src/game.cpp:1081 -msgid "You died." -msgstr "Sie sind gestorben." +#: src/game.cpp +msgid "Change Keys" +msgstr "Tasten ändern" -#: src/game.cpp:1082 -msgid "Respawn" -msgstr "Wiederbeleben" +#: src/game.cpp +msgid "Change Password" +msgstr "Passwort ändern" -#: src/game.cpp:1101 +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Zum Server verbinden ..." + +#: src/game.cpp +msgid "Continue" +msgstr "Weiter" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Client erstellen ..." + +#: src/game.cpp +msgid "Creating server..." +msgstr "Server erstellen ..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Standard-Tastenbelegung:\n" +"- WASD: bewegen\n" +"- Leertaste: springen/klettern\n" +"- Umschalt: kriechen/herunterklettern\n" +"- Q: Item fallen lassen\n" +"- I: Inventar\n" +"- Maus: drehen/umschauen\n" +"- Maus links: graben/schlagen\n" +"- Maus rechts: platzieren/benutzen\n" +"- Mausrad: Gegenstand auswählen\n" +"- T: Chat\n" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -626,614 +687,2904 @@ msgstr "" "- berühren u. ziehen, mit 2. Finger antippen\n" " --> 1 Gegenstand ins Feld platzieren\n" -#: src/game.cpp:1115 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" -"Standard-Tastenbelegung:\n" -"- WASD: Bewegen\n" -"- Leertaste: Springen/Klettern\n" -"- Umschalt: Kriechen/herunterklettern\n" -"- Q: Item fallen lassen\n" -"- I: Inventar\n" -"- Maus: drehen/umschauen\n" -"- Maus links: Abbauen/Schlagen\n" -"- Maus rechts: Platzieren/Benutzen\n" -"- Mausrad: Gegenstand auswählen\n" -"- T: Chat\n" - -#: src/game.cpp:1134 -msgid "Continue" -msgstr "Weiter" - -#: src/game.cpp:1138 -msgid "Change Password" -msgstr "Passwort ändern" - -#: src/game.cpp:1143 -msgid "Sound Volume" -msgstr "Tonlautstärke" - -#: src/game.cpp:1145 -msgid "Change Keys" -msgstr "Tasten ändern" - -#: src/game.cpp:1148 +#: src/game.cpp msgid "Exit to Menu" msgstr "Hauptmenü" -#: src/game.cpp:1150 +#: src/game.cpp msgid "Exit to OS" msgstr "Programm beenden" -#: src/game.cpp:1827 -msgid "Shutting down..." -msgstr "Herunterfahren ..." - -#: src/game.cpp:1876 -msgid "Loading..." -msgstr "Laden ..." - -#: src/game.cpp:1933 -msgid "Creating server..." -msgstr "Server erstellen ..." - -#: src/game.cpp:1970 -msgid "Creating client..." -msgstr "Client erstellen ..." - -#: src/game.cpp:2143 -msgid "Resolving address..." -msgstr "Adresse auflösen ..." - -#: src/game.cpp:2234 -msgid "Connecting to server..." -msgstr "Zum Server verbinden ..." - -#: src/game.cpp:2292 +#: src/game.cpp msgid "Item definitions..." msgstr "Item-Definitionen ..." -#: src/game.cpp:2297 -msgid "Node definitions..." -msgstr "Node-Definitionen ..." +#: src/game.cpp +msgid "KiB/s" +msgstr "KiB/s" -#: src/game.cpp:2304 +#: src/game.cpp msgid "Media..." msgstr "Medien ..." -#: src/game.cpp:2309 -msgid " KB/s" -msgstr " KB/s" +#: src/game.cpp +msgid "MiB/s" +msgstr "MiB/s" -#: src/game.cpp:2313 -msgid " MB/s" -msgstr " MB/s" +#: src/game.cpp +msgid "Node definitions..." +msgstr "Node-Definitionen ..." -#: src/game.cpp:4265 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Siehe debug.txt für Details." +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Fortsetzen" -#: src/guiFormSpecMenu.cpp:2799 +#: src/game.cpp +msgid "Resolving address..." +msgstr "Adresse auflösen ..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Wiederbeleben" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Herunterfahren ..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Tonlautstärke" + +#: src/game.cpp +msgid "You died." +msgstr "Sie sind gestorben." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "Enter " -#: src/guiFormSpecMenu.cpp:2819 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "OK" -#: src/guiKeyChangeMenu.cpp:126 +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "Benutzen = runterklettern" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Rückwärts" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Chat" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Befehl" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Konsole" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "2×Sprungtaste zum Fliegen" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Wegwerfen" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Vorwärts" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventar" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Springen" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Taste bereits in Benutzung" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Steuerung (Falls dieses Menü versagt, entfernen Sie Sachen aus minetest.conf)" -#: src/guiKeyChangeMenu.cpp:166 -msgid "\"Use\" = climb down" -msgstr "Benutzen = runterklettern" - -#: src/guiKeyChangeMenu.cpp:181 -msgid "Double tap \"jump\" to toggle fly" -msgstr "2×Sprungtaste zum Fliegen" - -#: src/guiKeyChangeMenu.cpp:297 -msgid "Key already in use" -msgstr "Taste bereits in Benutzung" - -#: src/guiKeyChangeMenu.cpp:372 -msgid "press key" -msgstr "Taste drücken" - -#: src/guiKeyChangeMenu.cpp:398 -msgid "Forward" -msgstr "Vorwärts" - -#: src/guiKeyChangeMenu.cpp:399 -msgid "Backward" -msgstr "Rückwärts" - -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Links" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:229 -msgid "Right" -msgstr "Rechts" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Use" -msgstr "Benutzen" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Jump" -msgstr "Springen" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Sneak" -msgstr "Schleichen" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Drop" -msgstr "Wegwerfen" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Inventory" -msgstr "Inventar" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Chat" -msgstr "Chat" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Command" -msgstr "Befehl" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Console" -msgstr "Konsole" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fly" -msgstr "Flugmodus" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fast" -msgstr "Schnellmodus" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle Cinematic" -msgstr "Kinomodus" - -#: src/guiKeyChangeMenu.cpp:413 -msgid "Toggle noclip" -msgstr "Geistmodus" - -#: src/guiKeyChangeMenu.cpp:414 -msgid "Range select" -msgstr "Weite Sicht" - -#: src/guiKeyChangeMenu.cpp:415 +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Stack ausgeben" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Altes Passwort" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Weite Sicht" -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Neues Passwort" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Rechts" -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Passwort wiederholen" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Schleichen" -#: src/guiPasswordChange.cpp:155 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "Kinomodus" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Schnellmodus" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Flugmodus" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Geistmodus" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Benutzen" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "Taste drücken" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Ändern" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Passwort bestätigen" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Neues Passwort" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Altes Passwort" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" -msgstr "Passwörter passen nicht zusammen!" +msgstr "Passwörter stimmen nicht überein!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "Tonlautstärke: " - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Zurück" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Linke Taste" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Tonlautstärke: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Mittlere Taste" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Rechte Taste" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "X-Knopf 1" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "Rücktaste" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "Clear" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "Eingabe" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "X-Knopf 2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Feststellen" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Strg" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Menü" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Pause" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Umsch." - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "Convert" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Escape" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "Ende" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Pos1" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "Mode Change" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Bild runter" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Bild hoch" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Leertaste" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Runter" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Ausführen" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Druck" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Select" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Hoch" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Hilfe" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Einfg" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "Druck" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "Win links" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" -msgstr "Apps" +msgstr "Anwendungen" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Ziffernblock 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Ziffernblock 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "Win rechts" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Schlaf" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Ziffernblock 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Ziffernblock 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Ziffernblock 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Ziffernblock 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Ziffernblock 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Ziffernblock 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Ziffernblock *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Ziffernblock +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Ziffernblock -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Ziffernblock /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Ziffernblock 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Ziffernblock 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Num" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Rollen" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Umsch. links" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Umsch. rechts" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Strg links" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Alt" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Strg rechts" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Alt Gr" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Komma" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "Minus" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "Punkt" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Plus" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "Rücktaste" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Feststellen" + +#: src/keycode.cpp +msgid "Clear" +msgstr "sauber" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Komma" + +#: src/keycode.cpp +msgid "Control" +msgstr "Strg" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Konvertierung" + +#: src/keycode.cpp msgid "CrSel" -msgstr "CrSel" +msgstr "Cr Sel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "Runter" + +#: src/keycode.cpp +msgid "End" +msgstr "Ende" + +#: src/keycode.cpp msgid "Erase OEF" -msgstr "Erase OEF" +msgstr "Verdecke OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 -msgid "OEM Clear" -msgstr "OEM Clear" +#: src/keycode.cpp +msgid "Execute" +msgstr "Ausführen" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Final" +msgstr "Ziel" + +#: src/keycode.cpp +msgid "Help" +msgstr "Hilfe" + +#: src/keycode.cpp +msgid "Home" +msgstr "Pos1" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Einfg" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Linke Taste" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Strg links" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Alt" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Umsch. links" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Win links" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menü" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Mittlere Taste" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Minus" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Modus wechseln" + +#: src/keycode.cpp +msgid "Next" +msgstr "Bild runter" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Keine konventierung" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Ziffernblock *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Ziffernblock +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Ziffernblock -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Ziffernblock /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Ziffernblock 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Ziffernblock 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Ziffernblock 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Ziffernblock 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Ziffernblock 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Ziffernblock 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Ziffernblock 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Ziffernblock 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Ziffernblock 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Ziffernblock 9" + +#: src/keycode.cpp +msgid "OEM Clear" +msgstr "OEM Reinigen" + +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pause" + +#: src/keycode.cpp +msgid "Period" +msgstr "Punkt" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plus" + +#: src/keycode.cpp +msgid "Print" +msgstr "Druck" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Bild hoch" + +#: src/keycode.cpp +msgid "Return" +msgstr "Eingabe" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Rechte Taste" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Strg rechts" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Alt Gr" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Umsch. rechts" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Win rechts" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Rollen" + +#: src/keycode.cpp +msgid "Select" +msgstr "Auswählen" + +#: src/keycode.cpp +msgid "Shift" +msgstr "L. Umsch" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Schlaf" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Druck" + +#: src/keycode.cpp +msgid "Space" +msgstr "Leertaste" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Hoch" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X-Knopf 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X-Knopf 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" -#~ msgid "Game Name" -#~ msgstr "Spielname" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Kann mod \"$1\" nicht in Spiel \"$2\" kopieren" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "3D-Wolken" -#~ msgid "GAMES" -#~ msgstr "SPIELE" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D mode" +msgstr "Flugmodus" -#~ msgid "Games" -#~ msgstr "Spiele" +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" -#~ msgid "Mods:" -#~ msgstr "Mods:" +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" -#~ msgid "edit game" -#~ msgstr "Spiel ändern" +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" -#~ msgid "new game" -#~ msgstr "neues Spiel" +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" -#~ msgid "EDIT GAME" -#~ msgstr "SPIEL ÄNDERN" +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" -#~ msgid "Remove selected mod" -#~ msgstr "Ausgewählte Mod löschen" +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Mod hinzufügen" +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" -#~ msgid "CLIENT" -#~ msgstr "CLIENT" +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" -#~ msgid "Favorites:" -#~ msgstr "Favoriten:" +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" -#~ msgid "START SERVER" -#~ msgstr "SERVER STARTEN" +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" -#~ msgid "Name" -#~ msgstr "Name" +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" -#~ msgid "Password" -#~ msgstr "Passwort" +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "Erweitert" -#~ msgid "SETTINGS" -#~ msgstr "EINSTELLUNGEN" +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" -#~ msgid "Preload item visuals" -#~ msgstr "Lade Inventarbilder vor" +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" -#~ msgid "Finite Liquid" -#~ msgstr "Endliches Wasser" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Anisotroper Filter" -#~ msgid "SINGLE PLAYER" -#~ msgstr "EINZELSPIELER" +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" -#~ msgid "TEXTURE PACKS" -#~ msgstr "TEXTUREN PAKETE" +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" -#~ msgid "MODS" -#~ msgstr "MODS" +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" -#~ msgid "Add mod:" -#~ msgstr "Modifikation hinzufügen:" +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" -#~ msgid "Local install" -#~ msgstr "Lokale Install." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Rückwärts" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Warnung: Einige Mods sind noch nicht konfiguriert.\n" -#~ "Sie werden aktiviert wenn die Konfiguration gespeichert wird. " +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Warnung: Einige konfigurierte Mods fehlen.\n" -#~ "Mod Einstellungen werden gelöscht wenn die Konfiguration gespeichert " -#~ "wird. " +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Bilinearer Filter" -#~ msgid "KEYBINDINGS" -#~ msgstr "TASTEN EINST." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Bind-Adresse" -#~ msgid "Delete map" -#~ msgstr "Karte löschen" +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Build inside player" +msgstr "Mehrspieler" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "Bumpmappen" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Tasten ändern" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Tasten ändern" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Kreativmodus" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Kreativmodus" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "3D-Wolken" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" +msgstr "Hauptmenü" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Befehl" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Verbundenes Glas" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Zum Server verbinden ..." + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Konsole" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Konsole" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Konsole" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Strg" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Schaden einschalten" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default game" +msgstr "Spiel ändern" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Neues Passwort" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Partikel aktivieren" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "2×Sprungtaste zum Fliegen" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "2×Sprungtaste zum Fliegen" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "Online-Mod-Archiv" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Schaden einschalten" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "no" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Kein Filter" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fly key" +msgstr "Flugmodus" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Vorwärts" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "GUI scaling filter" +msgstr "GUI-Skalierfaktor" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Generate normalmaps" +msgstr "Normalmaps generieren" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "MP deaktivieren" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "Aktiviert" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Spiel" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Inventar" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Springen" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Alt" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Hauptmenü" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Hauptmenü" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Weltgenerator" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Weltgenerator" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Weltgenerator" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Weltgenerator" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Weltgenerator" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Weltgenerator" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Menü" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Mip-Mapping" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Node highlighting" +msgstr "Blöcke hervorheben" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "Parallax Oklusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion" +msgstr "Parallax Oklusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion Scale" +msgstr "Parallax Oklusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion bias" +msgstr "Parallax Oklusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion iterations" +msgstr "Parallax Oklusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion mode" +msgstr "Parallax Oklusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion strength" +msgstr "Parallax Oklusion" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Player name" +msgstr "Spielername zu lang." + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Texturen laden ..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Weite Sicht" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Alt Gr" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Druck" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Einzelspieler starten" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Serverport" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "Serverport" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Serverport" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Öffentliche Serverliste" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Öffentliche Serverliste" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Shader" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Besseres Licht" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Schleichen" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of generated normalmaps." +msgstr "Normalmaps generieren" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Texturpakete" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Trilinearer Filter" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "Taste drücken" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Ehemalige Hauptentwickler" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Tonlautstärke" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Walking speed" +msgstr "Wehende Blätter" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving Nodes" +msgstr "Wehende Blätter" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Wehende Blätter" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving plants" +msgstr "Wogende Pflanzen" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water" +msgstr "Wasserwellen" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water height" +msgstr "Wasserwellen" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water length" +msgstr "Wasserwellen" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water speed" +msgstr "Wasserwellen" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Rendering:" +#~ msgstr "Rendering:" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Neustart nach Ändern des Treibers erforderlich" + +#~ msgid "Downloading" +#~ msgstr "Lade herunter" + +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Linksklick: Alle Items bewegen, Rechtsklick: Einzelnes Item bewegen" + +#~ msgid "is required by:" +#~ msgstr "wird benötigt von:" + +#~ msgid "Configuration saved. " +#~ msgstr "Konfiguration gespeichert. " + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Warnung: Konfiguration nicht konsistent. " + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Kann Welt nicht erstellen: Name enthält ungültige Zeichen" + +#~ msgid "Show Public" +#~ msgstr "Zeige öffentliche" + +#~ msgid "Show Favorites" +#~ msgstr "Zeige Favoriten" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Lasse die Adresse frei um einen eigenen Server zu starten." + +#~ msgid "Create world" +#~ msgstr "Welt erstellen" + +#~ msgid "Address required." +#~ msgstr "Adresse benötigt." + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Kann Welt nicht löchen: Nichts ausgewählt" + +#~ msgid "Files to be deleted" +#~ msgstr "Zu löschende Dateien" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Kann Welt nicht erstellen: Keine Spiele gefunden" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Kann Welt nicht konfigurieren: Nichts ausgewählt" + +#~ msgid "Failed to delete all world files" +#~ msgstr "Es konnten nicht alle Welt Dateien gelöscht werden" #~ msgid "" #~ "Default Controls:\n" @@ -1259,62 +3610,149 @@ msgstr "Zoom" #~ "- I: Inventar\n" #~ "- T: Chat\n" -#~ msgid "Failed to delete all world files" -#~ msgstr "Es konnten nicht alle Welt Dateien gelöscht werden" +#~ msgid "Delete map" +#~ msgstr "Karte löschen" -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Kann Welt nicht konfigurieren: Nichts ausgewählt" +#~ msgid "KEYBINDINGS" +#~ msgstr "TASTEN EINST." -#~ msgid "Cannot create world: No games found" -#~ msgstr "Kann Welt nicht erstellen: Keine Spiele gefunden" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Warnung: Einige konfigurierte Mods fehlen.\n" +#~ "Mod Einstellungen werden gelöscht wenn die Konfiguration gespeichert " +#~ "wird. " -#~ msgid "Files to be deleted" -#~ msgstr "Zu löschende Dateien" +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Warnung: Einige Mods sind noch nicht konfiguriert.\n" +#~ "Sie werden aktiviert wenn die Konfiguration gespeichert wird. " -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Kann Welt nicht löchen: Nichts ausgewählt" +#~ msgid "Local install" +#~ msgstr "Lokale Install." -#~ msgid "Address required." -#~ msgstr "Adresse benötigt." +#~ msgid "Add mod:" +#~ msgstr "Modifikation hinzufügen:" -#~ msgid "Create world" -#~ msgstr "Welt erstellen" +#~ msgid "MODS" +#~ msgstr "MODS" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Lasse die Adresse frei um einen eigenen Server zu starten." +#~ msgid "TEXTURE PACKS" +#~ msgstr "TEXTUREN PAKETE" -#~ msgid "Show Favorites" -#~ msgstr "Zeige Favoriten" +#~ msgid "SINGLE PLAYER" +#~ msgstr "EINZELSPIELER" -#~ msgid "Show Public" -#~ msgstr "Zeige öffentliche" +#~ msgid "Finite Liquid" +#~ msgstr "Endliches Wasser" -#~ msgid "Advanced" -#~ msgstr "Erweitert" +#~ msgid "Preload item visuals" +#~ msgstr "Lade Inventarbilder vor" -#~ msgid "Multiplayer" -#~ msgstr "Mehrspieler" +#~ msgid "SETTINGS" +#~ msgstr "EINSTELLUNGEN" -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Kann Welt nicht erstellen: Name enthält ungültige Zeichen" +#~ msgid "Password" +#~ msgstr "Passwort" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Warnung: Konfiguration nicht konsistent. " +#~ msgid "Name" +#~ msgstr "Name" -#~ msgid "Configuration saved. " -#~ msgstr "Konfiguration gespeichert. " +#~ msgid "START SERVER" +#~ msgstr "SERVER STARTEN" -#~ msgid "is required by:" -#~ msgstr "wird benötigt von:" +#~ msgid "Favorites:" +#~ msgstr "Favoriten:" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Linksklick: Alle Items bewegen, Rechtsklick: Einzelnes Item bewegen" +#~ msgid "CLIENT" +#~ msgstr "CLIENT" -#~ msgid "Anisotropic Filtering" -#~ msgstr "Anisotroper Filter" +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Mod hinzufügen" -#~ msgid "Mip-Mapping" -#~ msgstr "Mip-Mapping" +#~ msgid "Remove selected mod" +#~ msgstr "Ausgewählte Mod löschen" -#~ msgid "Downloading" -#~ msgstr "Lade herunter" +#~ msgid "EDIT GAME" +#~ msgstr "SPIEL ÄNDERN" + +#~ msgid "new game" +#~ msgstr "neues Spiel" + +#~ msgid "Mods:" +#~ msgstr "Mods:" + +#~ msgid "GAMES" +#~ msgstr "SPIELE" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Kann mod \"$1\" nicht in Spiel \"$2\" kopieren" + +#~ msgid "Game Name" +#~ msgstr "Spielname" + +#~ msgid " MB/s" +#~ msgstr " MB/s" + +#~ msgid " KB/s" +#~ msgstr " KB/s" + +#~ msgid "Touchthreshold (px)" +#~ msgstr "Berührungsempfindlichkeit (px)" + +#~ msgid "Touch free target" +#~ msgstr "Berührungsfreies Ziel" + +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Um Shader zu benutzen, muss der OpenGL-Treiber benutzt werden." + +#~ msgid "Texturing:" +#~ msgstr "Texturierung:" + +#~ msgid "Simple Leaves" +#~ msgstr "Einfache Blätter" + +#~ msgid "Scaling factor applied to menu elements: " +#~ msgstr "Auf Menüelemente angewandter Skalierfaktor: " + +#~ msgid "Reset singleplayer world" +#~ msgstr "Einzelspielerwelt zurücksetzen" + +#~ msgid "Opaque Water" +#~ msgstr "Undurchs. Wasser" + +#~ msgid "Opaque Leaves" +#~ msgstr "Undurchs. Blätter" + +#~ msgid "No!!!" +#~ msgstr "Nein!!!" + +#~ msgid "No Mipmap" +#~ msgstr "Keine Mipmap" + +#~ msgid "Mipmap + Aniso. Filter" +#~ msgstr "Mipmap u. Aniso. Filter" + +#~ msgid "Mipmap" +#~ msgstr "Mipmap" + +#~ msgid "Fancy Leaves" +#~ msgstr "Schöne Blätter" + +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr "Sind Sie sicher, dass Sie die Einzelspielerwelt löschen wollen?" + +#~ msgid "Antialiasing:" +#~ msgstr "Kantenglättung:" + +#~ msgid "8x" +#~ msgstr "8x" + +#~ msgid "4x" +#~ msgstr "4x" + +#~ msgid "2x" +#~ msgstr "2x" diff --git a/po/eo/minetest.po b/po/eo/minetest.po new file mode 100644 index 00000000..d0ca66e5 --- /dev/null +++ b/po/eo/minetest.po @@ -0,0 +1,3587 @@ +# Esperanto translations for minetest package. +# Copyright (C) 2015 THE minetest'S COPYRIGHT HOLDER +# This file is distributed under the same license as the minetest package. +# Automatically generated, 2015. +# +msgid "" +msgstr "" +"Project-Id-Version: minetest\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-09-13 12:36+0200\n" +"Last-Translator: Tim \n" +"Language-Team: Esperanto \n" +"Language: eo\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.4-dev\n" + +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "Eraro okazis en Lua skripto, kiel modifo:" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "Eraro okazis:" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "Ĉefmenuo" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua +msgid "Ok" +msgstr "Bone" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "Rekonekti" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "Servilo petis rekonekton:" + +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Ŝargas…" + +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "Provu reŝalti la publikan serviloliston kaj kontrolu vian retkonekton." + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Cancel" +msgstr "Nuligi" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Dependas:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable MP" +msgstr "Malŝaltu modifaron" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Ŝaltu modifaron" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable all" +msgstr "Ŝaltu ĉiujn" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" +"Fiaskis aktivigi modifon \"$1\", ĉar ĝi enhavas malpermesajn signojn. Nur " +"literciferaj signoj [a-z0-9_] estas permesaj." + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Kaŝu ludon" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Kaŝu modifarojn" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Modifo:" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Konservi" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Mondo:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "ŝaltita" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "Mondo nomata \"$1\" jam ekzistas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Krei" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Elŝutu subludon, kiel minetest_game, el minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Elŝutu ludon el minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Ludo" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Mondogenerilo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No worldname given or no game selected" +msgstr "Neniu mondonomo donitas aŭ neniu ludon elektitas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Fontnombro" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" +"Averto: La minimuma programista testo estas intencita por programistoj." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Monda nomo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Neniu instalantaj subludoj." + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Are you sure you want to delete \"$1\"?" +msgstr "Ĉu vi certas forigi \"$1\"?" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Modmgr: failed to delete \"$1\"" +msgstr "Modmgr: fiaskis forigi \"$1\"" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Modmgr: invalid modpath \"$1\"" +msgstr "Modmgr: malvalida modifo-dosierindiko \"$1\"" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Ne, memkompreneble!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Jes" + +#: builtin/mainmenu/dlg_delete_world.lua +msgid "Delete World \"$1\"?" +msgstr "Ĉu forigi mondon \"$1\"?" + +#: builtin/mainmenu/dlg_delete_world.lua +msgid "No" +msgstr "Ne" + +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp +msgid "Accept" +msgstr "Akcepti" + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Alinomi modifaron:" + +#: builtin/mainmenu/modmgr.lua +msgid "" +"\n" +"Install Mod: unsupported filetype \"$1\" or broken archive" +msgstr "" +"\n" +"Instali Modifon: malsubtenata dosiertipo \"$1\" aŭ rompiĝata arkivo" + +#: builtin/mainmenu/modmgr.lua +msgid "Failed to install $1 to $2" +msgstr "Fiaskis instali $1 al $2" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Instali modifon: dosiero \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Instali modifon: Ne povis trovi veran modifonomon por $1" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" +msgstr "" +"Instali modifon: Ne povis trovi ĝustan dosierujan nomon por modifaro $1" + +#: builtin/mainmenu/store.lua +msgid "Close store" +msgstr "Fermi" + +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "Elŝutas $1, bonvolu atendi…" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Instali" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "Paĝo $1 de $2" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Takso" + +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Serĉi" + +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Konciza nomo:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Instalis sukcese:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Neordigita" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Instali denove" + +#: builtin/mainmenu/tab_credits.lua +msgid "Active Contributors" +msgstr "Aktivaj kontribuistoj" + +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Kernprogramistoj" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Kontribuantaro" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Contributors" +msgstr "Eksaj kontribuistoj" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Eksaj kernprogramistoj" + +#: builtin/mainmenu/tab_mods.lua +msgid "Installed Mods:" +msgstr "Instalantaj modifoj:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Mod information:" +msgstr "Modifaj informoj:" + +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua +msgid "Mods" +msgstr "Modifoj" + +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Neniu modifa priskribo disponeblas" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Alinomi" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Selekti modifan dosieron:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Malinstali selektan modifo" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Malinstali selektan modifaron" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Address / Port :" +msgstr "Adreso / Pordo:" + +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp +msgid "Client" +msgstr "Kliento" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Konekti" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "Kreiva reĝimo" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Damaĝo ŝaltitas" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Forigi" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Nomo / Pasvorto:" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Publika servilolisto" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "Dueloj ŝaltitas" + +#: builtin/mainmenu/tab_server.lua +msgid "Bind Address" +msgstr "Asocianta adreso" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Agordi" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Kreiva reĝimo" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Ŝalti damaĝon" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nomo/Pasvorto" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Nova" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "Neniu mondo kreintas aŭ selektantas!" + +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "Pordo" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Publika" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Elektu mondon:" + +#: builtin/mainmenu/tab_server.lua +msgid "Server" +msgstr "Servilo" + +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Servila pordo" + +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Startigi ludon" + +#: builtin/mainmenu/tab_settings.lua +msgid "\"" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "Ŝanĝi klavojn" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Disabled" +msgstr "Malŝaltu modifaron" + +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Enabled" +msgstr "ŝaltita" + +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Games" +msgstr "Ludo" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Selekto" + +#: builtin/mainmenu/tab_settings.lua +msgid "Settings" +msgstr "Agordoj" + +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Config mods" +msgstr "Agordi modifojn" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Main" +msgstr "Ĉefmenuo" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Startigi solludanton" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Play" +msgstr "Ludi" + +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Singleplayer" +msgstr "Solludanto" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "No information available" +msgstr "Neniu informoj disponeblas" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Selekti teksturaron:" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Texturepacks" +msgstr "Teksturaroj" + +#: src/client.cpp +msgid "Connection timed out." +msgstr "Konekto eltempiĝas." + +#: src/client.cpp +msgid "Done!" +msgstr "Finita!" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Pravalorizi nodaĵojn" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Pravalorizi nodaĵojn…" + +#: src/client.cpp +msgid "Item textures..." +msgstr "Aĵaj teksturoj…" + +#: src/client.cpp +msgid "Loading textures..." +msgstr "Ŝargi teksturojn…" + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Refaru ombrigilojn…" + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "Konekteraro (ĉu eltempiĝo?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Ne povas trovi aŭ ŝuti ludon \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Nevalida ludspecifo." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Ĉefmenuo" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Ne mondo selektas kaj ne adreso provizatas. Nenion fari." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Ludanta nomo trolongas." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "Donita monda dosierindiko ne ekzistas. " + +#: src/fontengine.cpp +msgid "needs_fallback_font" +msgstr "no" + +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Reviziu debug.txt por detaloj." + +#: src/game.cpp +msgid "Change Keys" +msgstr "Ŝanĝi klavojn" + +#: src/game.cpp +msgid "Change Password" +msgstr "Ŝanĝi pasvorton" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Konekti al servilo…" + +#: src/game.cpp +msgid "Continue" +msgstr "Daŭrigi" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Krei klienton…" + +#: src/game.cpp +msgid "Creating server..." +msgstr "Krei servilon…" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Defaŭltaj Klavoj:\n" +"- WASD: movi\n" +"- Spacetklavo: salti/klimi\n" +"- Majuskliga Klavo: lanti/malsupreniri\n" +"- Q: lasi aĵon\n" +"- I: inventaro\n" +"- Muso: turni/rigardi\n" +"- Muso maldekstra: fosi/bati\n" +"- Muso dekstra: lokigi/uzi\n" +"- Musrado: elekti aĵon\n" +"- T: babili\n" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" +"Defaŭltaj Klavoj:\n" +"Nevidebla menuo :\n" +"- unufoja tuŝeto: aktivigi butonon\n" +"- dufoja tuŝeto: lokigi/uzi\n" +"- ŝova fingro: rigardi\n" +"Videbla menuo/inventaro:\n" +"- dufoja tuŝeto (ekstere):\n" +" -->fermi\n" +"- tuŝi stakon, tuŝi inventaran spacon:\n" +" --> movi stakon\n" +"- tuŝi kaj treni, tuŝeti duan fingron\n" +" --> lokigi unun aĵon al inventara spaco\n" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "Foriri al menuo" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "Foriri al operaciumo" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "Aĵaj difinoj…" + +#: src/game.cpp +msgid "KiB/s" +msgstr "KiB/s" + +#: src/game.cpp +msgid "Media..." +msgstr "Medioj…" + +#: src/game.cpp +msgid "MiB/s" +msgstr "MiB/s" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "Nodaĵaj difinoj…" + +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Daŭrigi" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Adrestrovili…" + +#: src/game.cpp +msgid "Respawn" +msgstr "Renaskiĝi" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Malŝaltiĝi…" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Sonintenso" + +#: src/game.cpp +msgid "You died." +msgstr "Vi mortis." + +#: src/guiFormSpecMenu.cpp +msgid "Enter " +msgstr "Enen " + +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "bone" + +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Uzi\" = malsupreniri" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Malantaŭen" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Babili" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Komando" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Konzolo" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Dufoja tuŝeto \"salti\" por baskuli flugreĝimon" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Lasi" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Antaŭen" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventaro" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Salti" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Klavo jam uzatas" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" +"Klavagordoj (Se tiu menuo misfunkcias, forigu agordojn el minetest.conf)" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Maldekstren" + +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Print stacks" +msgstr "Presi stakojn" + +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Ŝanĝi vidodistancon" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Dekstren" + +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Lanti" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "Baskuli filmreĝimon" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Baskuli rapidreĝimon" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Baskuli flugreĝimon" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Baskuli nekolizian reĝimon" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Uzi" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "premi klavon" + +#: src/guiPasswordChange.cpp +msgid "Change" +msgstr "Ŝanĝi" + +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Certigi pasvorton" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Nova pasvorto" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Malnova pasvorto" + +#: src/guiPasswordChange.cpp +msgid "Passwords do not match!" +msgstr "Pasvortoj ne kongruas!" + +#: src/guiVolumeChange.cpp +msgid "Exit" +msgstr "Foriri" + +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Sonintenso: " + +#: src/keycode.cpp +msgid "Apps" +msgstr "Aplikaĵoj" + +#: src/keycode.cpp +msgid "Attn" +msgstr "Attn" + +#: src/keycode.cpp +msgid "Back" +msgstr "Retro" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Fiksiĝema klavo" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Vakigo" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Komo" + +#: src/keycode.cpp +msgid "Control" +msgstr "Stiro" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Konverto" + +#: src/keycode.cpp +msgid "CrSel" +msgstr "CrSel" + +#: src/keycode.cpp +msgid "Down" +msgstr "Malsupren" + +#: src/keycode.cpp +msgid "End" +msgstr "Fino" + +#: src/keycode.cpp +msgid "Erase OEF" +msgstr "Viŝi OEF" + +#: src/keycode.cpp +msgid "Escape" +msgstr "Eskapo" + +#: src/keycode.cpp +msgid "ExSel" +msgstr "ExSel" + +#: src/keycode.cpp +msgid "Execute" +msgstr "Ruli" + +#: src/keycode.cpp +msgid "Final" +msgstr "Finalo" + +#: src/keycode.cpp +msgid "Help" +msgstr "Helpo" + +#: src/keycode.cpp +msgid "Home" +msgstr "Hejmen" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Enmeti" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Maldekstra butono" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Maldekstra Stiro" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Maldekstra Menuo" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Maldekstra Majuskligo" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Maldekstra fenestro" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menuo" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Meza butono" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Minuso" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Reĝima ŝanĝo" + +#: src/keycode.cpp +msgid "Next" +msgstr "Sekvanto" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nekonverto" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Nombra Baskulo" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Klavareto *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Klavareto +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Klavareto -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Klavareto /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Klavareto 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Klavareto 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Klavareto 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Klavareto 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Klavareto 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Klavareto 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Klavareto 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Klavareto 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Klavareto 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Klavareto 9" + +#: src/keycode.cpp +msgid "OEM Clear" +msgstr "OEM Vakigi" + +#: src/keycode.cpp +msgid "PA1" +msgstr "PA1" + +#: src/keycode.cpp +msgid "Pause" +msgstr "Haltigo" + +#: src/keycode.cpp +msgid "Period" +msgstr "Punkto" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Pluso" + +#: src/keycode.cpp +msgid "Print" +msgstr "Presi" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Antaŭe" + +#: src/keycode.cpp +msgid "Return" +msgstr "Enen" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Dekstra butono" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Dekstra Stiro" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Dekstra Menuo" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Dekstra Majuskligo" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Dekstra fenestro" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Ruluma Baskulo" + +#: src/keycode.cpp +msgid "Select" +msgstr "Selekto" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Majuskligo" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Dormo" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Ekrankopio" + +#: src/keycode.cpp +msgid "Space" +msgstr "Spacetklavo" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tabo" + +#: src/keycode.cpp +msgid "Up" +msgstr "Supren" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X-Butono 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X-Butono 2" + +#: src/keycode.cpp +msgid "Zoom" +msgstr "Zomo" + +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "3D nuboj" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Malantaŭen" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Bilineara filtrilo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Asocianta adreso" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "Protuberancmapado" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Ŝanĝi klavojn" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Ŝanĝi klavojn" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Kreiva reĝimo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Kreiva reĝimo" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "3D nuboj" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" +msgstr "Ĉefmenuo" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Komando" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Ligata glaco" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Konekti al servilo…" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Konzolo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Konzolo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Konzolo" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Stiro" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Ŝalti damaĝon" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Nova pasvorto" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Ŝalti partiklojn" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "Dufoja tuŝeto \"salti\" por baskuli flugreĝimon" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "Dufoja tuŝeto \"salti\" por baskuli flugreĝimon" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "Interreta modifo-deponejo" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Ŝalti damaĝon" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "no" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Neniu filtrilo" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Antaŭen" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "GUI scaling filter" +msgstr "GUI skala faktoro" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Generate normalmaps" +msgstr "Generi Normalmapojn" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Malŝaltu modifaron" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "ŝaltita" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Ludo" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Inventaro" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Salti" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Maldekstra Menuo" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Ĉefmenuo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Ĉefmenuo" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Mondogenerilo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Mondogenerilo" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Mondogenerilo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Mondogenerilo" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Mondogenerilo" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Mondogenerilo" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Menuo" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Protuberancmapado" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Node highlighting" +msgstr "Marki nodaĵojn" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "Paralaksa Okludo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion" +msgstr "Paralaksa Okludo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion Scale" +msgstr "Paralaksa Okludo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion bias" +msgstr "Paralaksa Okludo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion iterations" +msgstr "Paralaksa Okludo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion mode" +msgstr "Paralaksa Okludo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion strength" +msgstr "Paralaksa Okludo" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Player name" +msgstr "Ludanta nomo trolongas." + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Ŝargi teksturojn…" + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Ŝanĝi vidodistancon" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Dekstra Menuo" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Ekrankopio" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Startigi solludanton" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Servilo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Servila pordo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "Servila pordo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Servilo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Servila pordo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Publika servilolisto" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Publika servilolisto" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Ombrigiloj" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Glatiga lumo" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Lanti" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of generated normalmaps." +msgstr "Generi Normalmapojn" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Teksturaroj" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Triineara filtrilo" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "premi klavon" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Eksaj kernprogramistoj" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Sonintenso" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Walking speed" +msgstr "Ondantaj foliaĵoj" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving Nodes" +msgstr "Ondantaj foliaĵoj" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Ondantaj foliaĵoj" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving plants" +msgstr "Ondantaj plantoj" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water" +msgstr "Ondanta akvo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water height" +msgstr "Ondanta akvo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water length" +msgstr "Ondanta akvo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water speed" +msgstr "Ondanta akvo" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Rendering:" +#~ msgstr "Bildigo:" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Restartigu Minetest-on por efikigi pelilan ŝanĝon" + +#~ msgid "Touchthreshold (px)" +#~ msgstr "Tuŝa sojlo (px)" + +#~ msgid "Touch free target" +#~ msgstr "Sentuŝa celo" + +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Por uzi ombrigilojn, OpenGL-a pelilo estas necesa." + +#~ msgid "Texturing:" +#~ msgstr "Teksturado:" + +#~ msgid "Simple Leaves" +#~ msgstr "Simplaj foliaĵoj" + +#~ msgid "Scaling factor applied to menu elements: " +#~ msgstr "Skala faktoro por menuoj " + +#~ msgid "Reset singleplayer world" +#~ msgstr "Nuligi solludantan mondon" + +#~ msgid "Opaque Water" +#~ msgstr "Opaka akvo" + +#~ msgid "Opaque Leaves" +#~ msgstr "Opakaj foliaĵoj" + +#~ msgid "No!!!" +#~ msgstr "Ne!!!" + +#~ msgid "No Mipmap" +#~ msgstr "Neniu Mipmapo" + +#~ msgid "Mipmap + Aniso. Filter" +#~ msgstr "Mipmapo + Malizotropa filtrilo" + +#~ msgid "Mipmap" +#~ msgstr "Mipmapo" + +#~ msgid "Fancy Leaves" +#~ msgstr "Ŝikaj foliaĵoj" + +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr "Ĉu vi certas, ke vi volas nuligi vian solludantan mondon?" + +#~ msgid "Antialiasing:" +#~ msgstr "Glatigo:" + +#~ msgid "8x" +#~ msgstr "8x" + +#~ msgid "4x" +#~ msgstr "4x" + +#~ msgid "2x" +#~ msgstr "2x" diff --git a/po/es/minetest.po b/po/es/minetest.po index 5f60213f..5d7ac085 100644 --- a/po/es/minetest.po +++ b/po/es/minetest.po @@ -7,160 +7,211 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-02-14 13:50+0100\n" -"PO-Revision-Date: 2015-02-14 13:35+0100\n" -"Last-Translator: Diego de las Heras \n" -"Language-Team: \n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-10-04 12:36+0200\n" +"Last-Translator: OdnetninI \n" +"Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Poedit 1.7.4\n" +"X-Generator: Weblate 2.5-dev\n" -#: builtin/fstk/ui.lua:67 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "Ha ocurrido un error en un script de Lua, por ejemplo en un mod:" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "Ha ocurrido un error:" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "Menú principal" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Aceptar" -#: builtin/mainmenu/dlg_config_world.lua:26 -msgid "World:" -msgstr "Mundo:" +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "Volver a conectar" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -msgid "Hide Game" -msgstr "Ocultar juego" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "El servidor ha solicitado una reconexión:" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" -msgstr "Ocultar contenido mp" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Cargando..." -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" -msgstr "Mod:" +#: builtin/mainmenu/common.lua +#, fuzzy +msgid "Protocol version mismatch. " +msgstr "No concuerda la versión del protocolo, servidor " -#: builtin/mainmenu/dlg_config_world.lua:48 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "Dependencias:" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Guardar" +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" +"Intenta re-habilitar la lista de servidores públicos y verifica tu conexión " +"a Internet." + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "Cancelar" -#: builtin/mainmenu/dlg_config_world.lua:68 -msgid "Enable MP" -msgstr "Activar paquete" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Dependencias:" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Desactivar paquete" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "Activado" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Activar paquete" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Activar todos" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Nombre del mundo" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" +"Error al habilitar el mod \"$1\" por contener caracteres no permitidos. Solo " +"se permiten los caracteres [a-z0-9_]." -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Semilla" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Ocultar juego" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Generador de mapas" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Ocultar contenido mp" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Juego" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod:" -#: builtin/mainmenu/dlg_create_world.lua:63 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Guardar" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Mundo:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "Activado" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "Ya existe un mundo llamado \"$1\"" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Crear" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "No tienes sub-juegos instalados." +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Descarga un sub-juego, como minetest_game, desde minetest.net" -#: builtin/mainmenu/dlg_create_world.lua:69 +#: builtin/mainmenu/dlg_create_world.lua msgid "Download one from minetest.net" msgstr "Descarga algunos desde minetest.net" -#: builtin/mainmenu/dlg_create_world.lua:72 +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Juego" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Generador de mapas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No worldname given or no game selected" +msgstr "No se ha dado un nombre al mundo o no se ha seleccionado uno" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Semilla" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Warning: The minimal development test is meant for developers." msgstr "" "Advertencia: El juego \"Minimal development test\" está diseñado para " "desarrolladores." -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "Descarga un sub-juego, como minetest_game, desde minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Nombre del mundo" -#: builtin/mainmenu/dlg_create_world.lua:97 -msgid "A world named \"$1\" already exists" -msgstr "Ya existe un mundo llamado \"$1\"" +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "No tienes sub-juegos instalados." -#: builtin/mainmenu/dlg_create_world.lua:116 -msgid "No worldname given or no game selected" -msgstr "No se ha dado un nombre al mundo o no se ha seleccionado uno" - -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "¿Realmente desea borrar \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:79 -msgid "Yes" -msgstr "Sí" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "¡No, por su puesto que no!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: Error al borrar \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: Ruta del mod \"$1\" inválida" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "¡No, por su puesto que no!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Sí" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "¿Eliminar el mundo \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "No" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Renombrar paquete de mod:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Aceptar" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" -msgstr "Instalar mod: Archivo: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Renombrar paquete de mod:" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -168,443 +219,455 @@ msgstr "" "\n" "Instalar mod: Formato de archivo \"$1\" no soportado o archivo corrupto" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Fallo al instalar $1 en $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Instalar mod: Archivo: \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Instalar mod: Imposible encontrar el nombre real del mod para: $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Instalar mod: Imposible encontrar un nombre de archivo adecuado para el " "paquete de mod $1" -#: builtin/mainmenu/modmgr.lua:386 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Instalar mod: Imposible encontrar el nombre real del mod para: $1" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "Sin ordenar" - -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "Buscar" - -#: builtin/mainmenu/store.lua:126 -msgid "Downloading $1, please wait..." -msgstr "Descargando $1, por favor espere..." - -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "Instalado con éxito:" - -#: builtin/mainmenu/store.lua:162 -msgid "Shortname:" -msgstr "Nombre corto:" - -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "Clasificación" - -#: builtin/mainmenu/store.lua:497 -msgid "re-Install" -msgstr "Reinstalar" - -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "Instalar" - # En el menú principal de mods pone repositorio no tienda. -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "Cerrar repositorio" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "Descargando $1, por favor espere..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Instalar" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "Página $1 de $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Créditos" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Clasificación" -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "Desarrolladores principales" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Buscar" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Nombre corto:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Instalado con éxito:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Sin ordenar" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Reinstalar" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Colaboradores activos" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Desarrolladores principales" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Créditos" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Antiguos colaboradores" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Antiguos desarrolladores" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Mods instalados:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Repositorio de mods en línea" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "La descripción del mod no está disponible" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Información del mod:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Renombrar" - -# El nombre completo no cabe. -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Desinstalar el paquete selecc." - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Desinstalar el mod seleccionado" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Selecciona el fichero del mod:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "Mods" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "La descripción del mod no está disponible" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Renombrar" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Selecciona el fichero del mod:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Desinstalar el mod seleccionado" + +# El nombre completo no cabe. +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Desinstalar el paquete seleccionado" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "Dirección / puerto:" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" -msgstr "Nombre / contraseña:" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Lista de servidores públicos" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Borrar" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Conectar" - -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 -msgid "Creative mode" -msgstr "Modo creativo" - -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 -msgid "Damage enabled" -msgstr "Daño activado" - -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 -msgid "PvP enabled" -msgstr "PvP activado" - -#: builtin/mainmenu/tab_multiplayer.lua:247 +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "Cliente" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Nuevo" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Conectar" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -msgid "Configure" -msgstr "Configurar" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Iniciar juego" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Selecciona un mundo:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:75 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" msgstr "Modo creativo" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:77 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" -msgstr "Permitir daños" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Daño activado" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Público" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Borrar" -# Los dos puntos son intencionados. -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" msgstr "Nombre / contraseña:" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Lista de servidores públicos" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "PvP activado" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "Asociar dirección" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Configurar" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Modo creativo" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Permitir daños" + +# Los dos puntos son intencionados. +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nombre / contraseña" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Nuevo" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "¡No se ha dado un nombre al mundo o no se ha seleccionado uno!" + +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "Puerto" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Puerto del servidor:" +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Público" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Selecciona un mundo:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Servidor" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "No Filter" -msgstr "Sin filtro" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Puerto del servidor" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Bilinear Filter" -msgstr "Filtro bi-lineal" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Iniciar juego" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Trilinear Filter" -msgstr "Filtro tri-lineal" +#: builtin/mainmenu/tab_settings.lua +msgid "\"" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Mipmap" -msgstr "Sin Mipmap" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Mipmap" -msgstr "Mipmap" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Mipmap + Aniso. Filter" -msgstr "Mipmap + Filtro aniso." - -#: builtin/mainmenu/tab_settings.lua:77 -msgid "Are you sure to reset your singleplayer world?" -msgstr "¿Estás seguro de querer reiniciar el mundo de un jugador?" - -#: builtin/mainmenu/tab_settings.lua:81 -msgid "No!!!" -msgstr "¡¡¡No!!!" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Smooth Lighting" -msgstr "Iluminación suave" - -#: builtin/mainmenu/tab_settings.lua:183 -msgid "Enable Particles" -msgstr "Habilitar partículas" - -#: builtin/mainmenu/tab_settings.lua:185 -msgid "3D Clouds" -msgstr "Nubes 3D" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Fancy Trees" -msgstr "Árboles detallados" - -#: builtin/mainmenu/tab_settings.lua:189 -msgid "Opaque Water" -msgstr "Agua opaca" - -#: builtin/mainmenu/tab_settings.lua:191 -msgid "Connected Glass" -msgstr "Vidrios conectados" - -#: builtin/mainmenu/tab_settings.lua:193 -msgid "Node Highlighting" -msgstr "Resaltar nodos" - -#: builtin/mainmenu/tab_settings.lua:196 -msgid "Texturing:" -msgstr "Texturizado:" - -#: builtin/mainmenu/tab_settings.lua:201 -msgid "Rendering:" -msgstr "Renderizado:" - -#: builtin/mainmenu/tab_settings.lua:205 -msgid "Restart minetest for driver change to take effect" -msgstr "Reinicia minetest para que los cambios en el controlador tengan efecto" - -#: builtin/mainmenu/tab_settings.lua:207 -msgid "Shaders" -msgstr "Sombreadores" - -#: builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Configurar teclas" -#: builtin/mainmenu/tab_settings.lua:215 -msgid "Reset singleplayer world" -msgstr "Reiniciar mundo de un jugador" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Disabled" +msgstr "Desactivar paquete" -#: builtin/mainmenu/tab_settings.lua:219 -msgid "GUI scale factor" -msgstr "Factor de escala (GUI)" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:223 -msgid "Scaling factor applied to menu elements: " -msgstr "Factor de escala aplicado a los elementos del menú: " +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Enabled" +msgstr "Activado" -#: builtin/mainmenu/tab_settings.lua:229 -msgid "Touch free target" -msgstr "Tocar para interactuar" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:235 -msgid "Touchthreshold (px)" -msgstr "Umbral táctil (px)" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Games" +msgstr "Juego" -#: builtin/mainmenu/tab_settings.lua:242 builtin/mainmenu/tab_settings.lua:256 -msgid "Bumpmapping" -msgstr "Mapeado de relieve" +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:244 builtin/mainmenu/tab_settings.lua:257 -msgid "Generate Normalmaps" -msgstr "Generar mapas normales" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:246 builtin/mainmenu/tab_settings.lua:258 -msgid "Parallax Occlusion" -msgstr "Oclusión de paralaje" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:248 builtin/mainmenu/tab_settings.lua:259 -msgid "Waving Water" -msgstr "Oleaje en el agua" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:250 builtin/mainmenu/tab_settings.lua:260 -msgid "Waving Leaves" -msgstr "Movimiento de hojas" +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:252 builtin/mainmenu/tab_settings.lua:261 -msgid "Waving Plants" -msgstr "Movimiento de plantas" +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:287 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Para habilitar los sombreadores debe utilizar el controlador OpenGL." +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Seleccionar" -#: builtin/mainmenu/tab_settings.lua:398 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Configuración" -#: builtin/mainmenu/tab_simple_main.lua:79 -msgid "Fly mode" -msgstr "Modo vuelo" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:83 -msgid "Start Singleplayer" -msgstr "Comenzar un jugador" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:84 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Configurar mods" -#: builtin/mainmenu/tab_simple_main.lua:203 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "Principal" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Comenzar un jugador" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Jugar" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Un jugador" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Seleccione un paquete de texturas:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Sin información disponible" +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "Ninguno" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Seleccione un paquete de texturas:" + # No cabe "Paquetes de texturas". -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "Texturas" -#: src/client.cpp:2788 -msgid "Loading textures..." -msgstr "Cargando texturas..." +#: src/client.cpp +msgid "Connection timed out." +msgstr "Tiempo de espera de la conexión agotado." -#: src/client.cpp:2798 -msgid "Rebuilding shaders..." -msgstr "Reconstruyendo sombreadores..." - -#: src/client.cpp:2805 -msgid "Initializing nodes..." -msgstr "Inicializando nodos..." - -#: src/client.cpp:2820 -msgid "Item textures..." -msgstr "Texturas de objetos..." - -#: src/client.cpp:2845 +#: src/client.cpp msgid "Done!" msgstr "¡Completado!" -#: src/client/clientlauncher.cpp:171 -msgid "Main Menu" -msgstr "Menú principal" +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Inicializando nodos" -#: src/client/clientlauncher.cpp:209 -msgid "Player name too long." -msgstr "Nombre de jugador demasiado largo." +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Inicializando nodos..." -#: src/client/clientlauncher.cpp:247 +#: src/client.cpp +msgid "Item textures..." +msgstr "Texturas de objetos..." + +#: src/client.cpp +msgid "Loading textures..." +msgstr "Cargando texturas..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Reconstruyendo sombreadores..." + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Error de conexión (¿tiempo agotado?)" -#: src/client/clientlauncher.cpp:412 +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "No se puede encontrar o cargar el juego \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Juego especificado no válido." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menú principal" + +#: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." msgstr "" "No se seleccionó el mundo y no se ha especificado una dirección. Nada que " "hacer." -#: src/client/clientlauncher.cpp:419 +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Nombre de jugador demasiado largo." + +#: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " msgstr "La ruta del mundo especificada no existe: " -#: src/client/clientlauncher.cpp:428 -msgid "Could not find or load game \"" -msgstr "No se puede encontrar o cargar el juego \"" - -#: src/client/clientlauncher.cpp:446 -msgid "Invalid gamespec." -msgstr "Juego especificado no válido." - -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1057 src/guiFormSpecMenu.cpp:2006 -msgid "Proceed" +#: src/game.cpp +#, fuzzy +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Revisa el archivo debug.txt para más detalles." + +#: src/game.cpp +msgid "Change Keys" +msgstr "Configurar teclas" + +#: src/game.cpp +msgid "Change Password" +msgstr "Cambiar contraseña" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Conectando al servidor..." + +#: src/game.cpp +msgid "Continue" msgstr "Continuar" -#: src/game.cpp:1077 -msgid "You died." -msgstr "Has muerto." +#: src/game.cpp +msgid "Creating client..." +msgstr "Creando cliente..." -#: src/game.cpp:1078 -msgid "Respawn" -msgstr "Revivir" +#: src/game.cpp +msgid "Creating server..." +msgstr "Creando servidor..." -#: src/game.cpp:1097 +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Controles predeterminados:\n" +"- WASD: moverse\n" +"- Espacio: saltar/subir\n" +"- Mayús.: puntillas/bajar\n" +"- Q: soltar objeto\n" +"- I: inventario\n" +"- Ratón: girar/mirar\n" +"- Ratón izq.: cavar/golpear\n" +"- Ratón der.: colocar/usar\n" +"- Ratón rueda: elegir objeto\n" +"- T: chat\n" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -632,519 +695,2918 @@ msgstr "" "- toque y arrastrar, toque con 2 dedos:\n" " -->colocar solamente un objeto\n" -#: src/game.cpp:1111 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" -"Controles predeterminados:\n" -"- WASD: moverse\n" -"- Espacio: saltar/subir\n" -"- Mayús.: puntillas/bajar\n" -"- Q: soltar objeto\n" -"- I: inventario\n" -"- Ratón: girar/mirar\n" -"- Ratón izq.: cavar/golpear\n" -"- Ratón der.: colocar/usar\n" -"- Ratón rueda: elegir objeto\n" -"- T: chat\n" - -#: src/game.cpp:1130 -msgid "Continue" -msgstr "Continuar" - -#: src/game.cpp:1134 -msgid "Change Password" -msgstr "Cambiar contraseña" - -#: src/game.cpp:1139 -msgid "Sound Volume" -msgstr "Volumen del sonido" - -#: src/game.cpp:1141 -msgid "Change Keys" -msgstr "Configurar teclas" - -#: src/game.cpp:1144 +#: src/game.cpp msgid "Exit to Menu" msgstr "Salir al menú" -#: src/game.cpp:1146 +#: src/game.cpp msgid "Exit to OS" msgstr "Salir al S.O." -#: src/game.cpp:1809 -msgid "Shutting down..." -msgstr "Cerrando..." - -#: src/game.cpp:1858 -msgid "Loading..." -msgstr "Cargando..." - -#: src/game.cpp:1915 -msgid "Creating server..." -msgstr "Creando servidor..." - -#: src/game.cpp:1952 -msgid "Creating client..." -msgstr "Creando cliente..." - -#: src/game.cpp:2125 -msgid "Resolving address..." -msgstr "Resolviendo dirección..." - -#: src/game.cpp:2216 -msgid "Connecting to server..." -msgstr "Conectando al servidor..." - -#: src/game.cpp:2274 +#: src/game.cpp msgid "Item definitions..." msgstr "Definiciones de objetos..." -#: src/game.cpp:2279 -msgid "Node definitions..." -msgstr "Definiciones de nodos..." +#: src/game.cpp +msgid "KiB/s" +msgstr "KiB/s" -#: src/game.cpp:2286 +#: src/game.cpp msgid "Media..." msgstr "Media..." -#: src/game.cpp:2291 -msgid " KB/s" -msgstr " KB/s" +#: src/game.cpp +msgid "MiB/s" +msgstr "MiB/s" -#: src/game.cpp:2295 -msgid " MB/s" -msgstr " MB/s" +#: src/game.cpp +msgid "Node definitions..." +msgstr "Definiciones de nodos..." -#: src/game.cpp:4210 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"Consulta debug.txt para obtener más detalles." +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Continuar" -#: src/guiFormSpecMenu.cpp:2797 +#: src/game.cpp +msgid "Resolving address..." +msgstr "Resolviendo dirección..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Revivir" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Cerrando..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Volumen del sonido" + +#: src/game.cpp +msgid "You died." +msgstr "Has muerto." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "Ingresar " -#: src/guiFormSpecMenu.cpp:2817 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "aceptar" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Usar\" = Descender" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Atrás" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Chat" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Comando" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Consola" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Pulsar dos veces \"saltar\" para volar" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Tirar" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Adelante" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventario" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Saltar" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "La tecla ya se está utilizando" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Combinaciones de teclas. (Si este menú da error, elimina líneas en minetest." "conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Usar\" = Descender" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Pulsar dos veces \"saltar\" para volar" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "La tecla ya se está utilizando" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "pulsa una tecla" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "Adelante" - -#: src/guiKeyChangeMenu.cpp:398 -msgid "Backward" -msgstr "Atrás" - -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Izquierda" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Derecha" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Usar" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Saltar" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "Caminar" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "Tirar" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "Inventario" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Chat" -msgstr "Chat" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Command" -msgstr "Comando" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Console" -msgstr "Consola" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "Activar volar" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "Activar rápido" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "Activar noclip" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "Seleccionar distancia" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Imprimir pilas" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "Contraseña anterior" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Seleccionar distancia" -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "Contraseña nueva" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Derecha" -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "Confirmar contraseña" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Caminar" -#: src/guiPasswordChange.cpp:155 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "Activar cinemático" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Activar rápido" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Activar volar" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Activar noclip" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Usar" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "pulsa una tecla" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Cambiar" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Confirmar contraseña" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Contraseña nueva" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Contraseña anterior" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "¡Las contraseñas no coinciden!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "Volúmen del sonido: " - # Es en el menú de sonido. Salir suena muy fuerte. -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Cerrar" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Botón izquierdo" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Volúmen del sonido: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Botón central" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Botón derecho" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "X Button 1" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "Atrás" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "Limpiar" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "Retorno" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tabulador" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "X Button 2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Bloq Mayús" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Menú" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Pausa" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "Convertir" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Escape" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "No convertir" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "Fin" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Inicio" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "Cambio de modo" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Siguiente" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Anterior" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Espacio" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Abajo" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Ejecutar" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Captura" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Seleccionar" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Arriba" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Ayuda" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Introducir" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "Captura de pantalla" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "Win izq." - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "Aplicaciones" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "Win der." - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Suspender" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Numpad *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Bloq Núm" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Bloq Despl" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Shift izq." - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Shift der." - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Control izq." - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Menú izq." - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Control der." - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Menú der." - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Coma" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "Menos" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "Punto" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Más" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "Atrás" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Bloq Mayús" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Limpiar" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Coma" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convertir" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "Abajo" + +#: src/keycode.cpp +msgid "End" +msgstr "Fin" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Borrar OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "Ejecutar" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Ayuda" + +#: src/keycode.cpp +msgid "Home" +msgstr "Inicio" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Introducir" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Botón izquierdo" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Control izq." + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Menú izq." + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Shift izq." + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Win izq." + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menú" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Botón central" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Menos" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Cambio de modo" + +#: src/keycode.cpp +msgid "Next" +msgstr "Siguiente" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "No convertir" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Bloq Núm" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numpad *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numpad +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numpad -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numpad /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "Limpiar OEM" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pausa" + +#: src/keycode.cpp +msgid "Period" +msgstr "Punto" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Más" + +#: src/keycode.cpp +msgid "Print" +msgstr "Captura" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Anterior" + +#: src/keycode.cpp +msgid "Return" +msgstr "Retorno" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Botón derecho" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Control der." + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Menú der." + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Shift der." + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Win der." + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Bloq Despl" + +#: src/keycode.cpp +msgid "Select" +msgstr "Seleccionar" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Suspender" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Captura de pantalla" + +#: src/keycode.cpp +msgid "Space" +msgstr "Espacio" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tabulador" + +#: src/keycode.cpp +msgid "Up" +msgstr "Arriba" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X Botón 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X Botón 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" + +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "Nubes 3D" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D mode" +msgstr "Modo vuelo" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Atrás" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Filtro bi-lineal" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Asociar dirección" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "Mapeado de relieve" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Configurar teclas" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Configurar teclas" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Modo creativo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Modo creativo" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "Nubes 3D" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" +msgstr "Menú principal" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Comando" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Vidrios conectados" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Conectando al servidor..." + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Consola" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Consola" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Consola" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Control" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Permitir daños" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Contraseña nueva" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Habilitar partículas" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "Pulsar dos veces \"saltar\" para volar" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "Pulsar dos veces \"saltar\" para volar" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "Repositorio de mods en línea" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Permitir daños" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "needs_fallback_font" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Sin filtro" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fly key" +msgstr "Modo vuelo" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Adelante" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "GUI scaling filter" +msgstr "Factor de escala (GUI)" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Generate normalmaps" +msgstr "Generar mapas normales" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Desactivar paquete" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "Activado" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Juego" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Inventario" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Saltar" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Menú izq." + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Menú principal" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Menú principal" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Generador de mapas" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Generador de mapas" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Generador de mapas" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Generador de mapas" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Generador de mapas" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Generador de mapas" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Menú" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Mapeado de relieve" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Node highlighting" +msgstr "Resaltar nodos" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "Oclusión de paralaje" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion" +msgstr "Oclusión de paralaje" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion Scale" +msgstr "Oclusión de paralaje" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion bias" +msgstr "Oclusión de paralaje" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion iterations" +msgstr "Oclusión de paralaje" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion mode" +msgstr "Oclusión de paralaje" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion strength" +msgstr "Oclusión de paralaje" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Player name" +msgstr "Nombre de jugador demasiado largo." + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Cargando texturas..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Seleccionar distancia" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Menú der." + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Captura de pantalla" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Comenzar un jugador" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Servidor" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Puerto del servidor" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "Puerto del servidor" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Servidor" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Puerto del servidor" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Lista de servidores públicos" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Lista de servidores públicos" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Sombreadores" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Iluminación suave" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Caminar" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of generated normalmaps." +msgstr "Generar mapas normales" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +# No cabe "Paquetes de texturas". +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Texturas" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Filtro tri-lineal" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "pulsa una tecla" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Antiguos desarrolladores" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Volumen del sonido" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Walking speed" +msgstr "Movimiento de hojas" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving Nodes" +msgstr "Movimiento de hojas" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Movimiento de hojas" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving plants" +msgstr "Movimiento de plantas" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water" +msgstr "Oleaje en el agua" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water height" +msgstr "Oleaje en el agua" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water length" +msgstr "Oleaje en el agua" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water speed" +msgstr "Oleaje en el agua" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Rendering:" +#~ msgstr "Renderizado:" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "" +#~ "Reinicia minetest para que los cambios en el controlador tengan efecto" + +#~ msgid " MB/s" +#~ msgstr " MB/s" + +#~ msgid " KB/s" +#~ msgstr " KB/s" + +#~ msgid "Touchthreshold (px)" +#~ msgstr "Umbral táctil (px)" + +#~ msgid "Touch free target" +#~ msgstr "Tocar para interactuar" + +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "" +#~ "Para habilitar los sombreadores debe utilizar el controlador OpenGL." + +#~ msgid "Texturing:" +#~ msgstr "Texturizado:" + +#~ msgid "Simple Leaves" +#~ msgstr "Hojas simples" + +#~ msgid "Scaling factor applied to menu elements: " +#~ msgstr "Factor de escala aplicado a los elementos del menú: " + +#~ msgid "Reset singleplayer world" +#~ msgstr "Reiniciar mundo de un jugador" + +#~ msgid "Opaque Water" +#~ msgstr "Agua opaca" + +#~ msgid "Opaque Leaves" +#~ msgstr "Hojas opacas" + +#~ msgid "No!!!" +#~ msgstr "¡¡¡No!!!" + +#~ msgid "No Mipmap" +#~ msgstr "Sin Mipmap" + +#~ msgid "Mipmap + Aniso. Filter" +#~ msgstr "Mipmap + Filtro aniso." + +#~ msgid "Mipmap" +#~ msgstr "Mipmap" + +#~ msgid "Fancy Leaves" +#~ msgstr "Hojas elegantes" + +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr "¿Estás seguro de querer reiniciar el mundo de un jugador?" + +#~ msgid "Antialiasing:" +#~ msgstr "Suavizado:" + +#~ msgid "8x" +#~ msgstr "8x" + +#~ msgid "4x" +#~ msgstr "4x" + +#~ msgid "2x" +#~ msgstr "2x" diff --git a/po/et/minetest.po b/po/et/minetest.po index 00a91955..c4883888 100644 --- a/po/et/minetest.po +++ b/po/et/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" "PO-Revision-Date: 2013-12-18 21:28+0200\n" "Last-Translator: Jabo Babo \n" "Language-Team: LANGUAGE \n" @@ -18,542 +18,605 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Menüü" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "kinnitama" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/fstk/ui.lua #, fuzzy -msgid "World:" -msgstr "Vali maailm:" +msgid "Reconnect" +msgstr "Liitu" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -#, fuzzy -msgid "Hide Game" -msgstr "Mäng" - -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Cancel" +msgstr "Tühista" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Depends:" msgstr "Vajab:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Salvesta" - -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 -msgid "Cancel" -msgstr "Tühista" - -#: builtin/mainmenu/dlg_config_world.lua:68 -#, fuzzy -msgid "Enable MP" -msgstr "Lülita kõik sisse" - -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Disable MP" msgstr "Lülita kõik välja" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "Sisse lülitatud" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Enable MP" +msgstr "Lülita kõik sisse" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Enable all" msgstr "Lülita kõik sisse" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Maailma nimi" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy -msgid "Mapgen" -msgstr "Põlvkonna kaardid" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" +msgid "Hide Game" msgstr "Mäng" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Loo" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Salvesta" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "World:" +msgstr "Vali maailm:" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "Sisse lülitatud" + +#: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "A world named \"$1\" already exists" msgstr "Maailma loomine ebaõnnestus: Samanimeline maailm on juba olemas" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Loo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Mäng" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen" +msgstr "Põlvkonna kaardid" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "No nimi või no mäng valitud" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Maailma nimi" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "Jah" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Jah" + +#: builtin/mainmenu/dlg_delete_world.lua #, fuzzy msgid "Delete World \"$1\"?" msgstr "Kustuta maailm: \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Ei" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Nõustu" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "Failed to install $1 to $2" msgstr "Maailma initsialiseerimine ebaõnnestus" -#: builtin/mainmenu/modmgr.lua:366 -msgid "Install Mod: unable to find suitable foldername for modpack $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua +msgid "Close store" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Alla" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Maailma nimi" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:476 -msgid "Rating" +#: builtin/mainmenu/store.lua +msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "" - -#: builtin/mainmenu/store.lua:522 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:530 -msgid "Page $1 of $2" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Tänuavaldused" - -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "Põhiline arendaja" - -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Co-arendaja" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Põhiline arendaja" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Tänuavaldused" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Early arendajad" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +#, fuzzy +msgid "Previous Core Developers" +msgstr "Põhiline arendaja" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:93 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua +msgid "Mods" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Rename" msgstr "" -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:121 +#: builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Select Mod File:" msgstr "Vali maailm:" -#: builtin/mainmenu/tab_mods.lua:165 -msgid "Mods" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Address / Port :" msgstr "IP/Port" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp +msgid "Client" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Liitu" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Creative mode" +msgstr "Kujunduslik mängumood" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Damage enabled" +msgstr "Sisse lülitatud" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Kustuta" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" msgstr "Nimi/Parool" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Public Serverlist" msgstr "Avatud serverite nimekiri:" -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Kustuta" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "PvP enabled" +msgstr "Sisse lülitatud" -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Liitu" - -#: builtin/mainmenu/tab_multiplayer.lua:252 -msgid "Client" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Uus" - -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -msgid "Configure" -msgstr "Konfigureeri" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Alusta mängu" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Vali maailm:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" -msgstr "Kujunduslik mängumood" - -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" -msgstr "Lülita valu sisse" - -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Avalik" - -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Konfigureeri" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Kujunduslik mängumood" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Lülita valu sisse" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nimi/Parool" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Uus" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +#, fuzzy +msgid "No world created or selected!" +msgstr "No nimi või no mäng valitud" + +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "" +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Avalik" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Vali maailm:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Alusta mängu" + +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" -msgstr "Ilus valgustus" - -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" -msgstr "Lülita osakesed sisse" - -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" -msgstr "3D pilved" - -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Uhked puud" - -#: builtin/mainmenu/tab_settings.lua:142 -#, fuzzy -msgid "Opaque Water" -msgstr "Läbipaistmatu vesi" - -#: builtin/mainmenu/tab_settings.lua:144 -#, fuzzy -msgid "Connected Glass" -msgstr "Liitu" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Väga hea kvaliteet" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Anisotroopne Filtreerimine" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Bi-lineaarsed Filtreerimine" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Tri-Linear Filtreerimine" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "Varjutajad" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Vaheta nuppe" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Reset singleplayer world" -msgstr "Üksikmäng" +msgid "Disabled" +msgstr "Lülita kõik välja" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Bumpmapping" -msgstr "Väga hea kvaliteet" +msgid "Enabled" +msgstr "Sisse lülitatud" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +msgid "Games" +msgstr "Mängud" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Aktiveerimiseks varjud, nad vajavad OpenGL draiver." +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Vali" + +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Sätted" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Üksikmäng" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Konfigureeri" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Menüü" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Üksikmäng" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Mängi" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Üksikmäng" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Vali graafika:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Informatsioon ei ole kättesaadav" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Vali graafika:" + +#: builtin/mainmenu/tab_texturepacks.lua #, fuzzy msgid "Texturepacks" msgstr "Vali graafika:" -#: src/client.cpp:2726 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Ühenduse viga (Aeg otsas?)" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp msgid "Item textures..." msgstr "" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "Ühenduse viga (Aeg otsas?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Ei leia ega suuda jätkata mängu \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Vale mängu ID." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menüü" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Pole valitud ei maailma ega IP aadressi. Pole midagi teha." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "Ärka ellu" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "" - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." @@ -561,500 +624,2933 @@ msgstr "" "\n" "Vaata debug.txt info jaoks." -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Vaheta nuppe" + +#: src/game.cpp +msgid "Change Password" +msgstr "Vaheta parooli" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp +msgid "Continue" +msgstr "Jätka" + +#: src/game.cpp +msgid "Creating client..." +msgstr "" + +#: src/game.cpp +msgid "Creating server..." +msgstr "" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "Välju menüüsse" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "Välju mängust" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "" + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Jätka" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp +msgid "Respawn" +msgstr "Ärka ellu" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Hääle volüüm" + +#: src/game.cpp +msgid "You died." +msgstr "Sa surid." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Tegevus\" = Roni alla" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Tagasi" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Jututuba" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Käsklus" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Konsool" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Topeltklõpsa \"Hüppamist\" et sisse lülitada lendamine" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Viska maha" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Edasi" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Seljakott" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Hüppamine" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Nupp juba kasutuses" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Nupusätted. (Kui see menüü sassi läheb, siis kustuta asju failist minetest." "conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Tegevus\" = Roni alla" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Topeltklõpsa \"Hüppamist\" et sisse lülitada lendamine" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "Nupp juba kasutuses" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "Vajuta nuppu" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "Edasi" - -#: src/guiKeyChangeMenu.cpp:398 -msgid "Backward" -msgstr "Tagasi" - -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Vasakule" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Paremale" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Tegevus" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Hüppamine" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "Hiilimine" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "Viska maha" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "Seljakott" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Chat" -msgstr "Jututuba" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Command" -msgstr "Käsklus" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Console" -msgstr "Konsool" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "Lülita lendamine sisse" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "Lülita kiirus sisse" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "Lülita läbi seinte minek sisse" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "Kauguse valik" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Prindi kogused" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" -msgstr "Vana parool" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Kauguse valik" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" -msgstr "Uus parool" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Paremale" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" -msgstr "Kinnita parooli" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Hiilimine" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Lülita kiirus sisse" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Lülita kiirus sisse" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Lülita lendamine sisse" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Lülita läbi seinte minek sisse" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Tegevus" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "Vajuta nuppu" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Muuda" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Kinnita parooli" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Uus parool" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Vana parool" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Paroolid ei ole samad!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "Hääle Volüüm: " - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Välju" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Vasak nupp" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Hääle Volüüm: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Keskmine nupp" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Parem nupp" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "X Nuppp 1" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "Tagasi" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "Tühjenda" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "Enter" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Reavahetus" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "X Nupp 2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Caps Lock" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "CTRL" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Menüü" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Paus" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Shift," - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "Konverteeri" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Põgene" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Viimane" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "Konverteerimatta" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "Lõpeta" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Kodu" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "Moodi vahetamine" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Järgmine" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Eelnev" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Tühik" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Alla" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Soorita" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Prindi" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Vali" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Üles" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Abi" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Sisesta" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "Mängupilt" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "Vasak Windowsi nupp" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "Aplikatsioonid" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Numbrilaual 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Numbrilaual 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "Parem Windowsi nupp" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Maga" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Numbrilaual 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Numbrilaual 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Numbrilaual 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Numbrilaual 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Numbrilaual 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Numbrilaual 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Numbrilaual *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Numbrilaual +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Numbrilaual -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Numbrilaual /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Numbrilaual 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Numbrilaual 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Numbrilaual Num Lock" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Scroll lukk" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Vasak Shift" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Parem Shift" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Vasak CTRL" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Vasak Menüü" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Parem CTRL" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Parem Menüü" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Koma" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "Miinus" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "Punkt" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Pluss" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "Tagasi" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Caps Lock" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Tühjenda" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Koma" + +#: src/keycode.cpp +msgid "Control" +msgstr "CTRL" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Konverteeri" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "Alla" + +#: src/keycode.cpp +msgid "End" +msgstr "Lõpeta" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Kustuta OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Põgene" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "Soorita" + +#: src/keycode.cpp +msgid "Final" +msgstr "Viimane" + +#: src/keycode.cpp +msgid "Help" +msgstr "Abi" + +#: src/keycode.cpp +msgid "Home" +msgstr "Kodu" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Sisesta" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Vasak nupp" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Vasak CTRL" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Vasak Menüü" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Vasak Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Vasak Windowsi nupp" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menüü" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Keskmine nupp" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Miinus" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Moodi vahetamine" + +#: src/keycode.cpp +msgid "Next" +msgstr "Järgmine" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Konverteerimatta" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Numbrilaual Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numbrilaual *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numbrilaual +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numbrilaual -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numbrilaual /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numbrilaual 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numbrilaual 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numbrilaual 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numbrilaual 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numbrilaual 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numbrilaual 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numbrilaual 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numbrilaual 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numbrilaual 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numbrilaual 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Tühi" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "Paus" + +#: src/keycode.cpp +msgid "Period" +msgstr "Punkt" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Pluss" + +#: src/keycode.cpp +msgid "Print" +msgstr "Prindi" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Eelnev" + +#: src/keycode.cpp +msgid "Return" +msgstr "Enter" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Parem nupp" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Parem CTRL" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Parem Menüü" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Parem Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Parem Windowsi nupp" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll lukk" + +#: src/keycode.cpp +msgid "Select" +msgstr "Vali" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift," + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Maga" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Mängupilt" + +#: src/keycode.cpp +msgid "Space" +msgstr "Tühik" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Reavahetus" + +#: src/keycode.cpp +msgid "Up" +msgstr "Üles" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X Nuppp 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X Nupp 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Suumi" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "3D pilved" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "Arenenud sätted" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Anisotroopne Filtreerimine" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Tagasi" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Bi-lineaarsed Filtreerimine" + +#: src/settings_translation_file.cpp +msgid "Bind address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Build inside player" +msgstr "Mitmikmäng" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bumpmapping" +msgstr "Väga hea kvaliteet" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Vaheta nuppe" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Vaheta nuppe" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Kujunduslik mängumood" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Kujunduslik mängumood" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "3D pilved" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" msgstr "Menüü" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "Colored fog" msgstr "" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Ühenduse viga (Aeg otsas?)" - -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Pole valitud ei maailma ega IP aadressi. Pole midagi teha." - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Ei leia ega suuda jätkata mängu \"" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Käsklus" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Vale mängu ID." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Liitu" -#~ msgid "Left click: Move all items, Right click: Move single item" +#: src/settings_translation_file.cpp +msgid "Connect to external media server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Konsool" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Konsool" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Konsool" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "CTRL" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Lülita valu sisse" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default game" +msgstr "Muuda mängu" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Uus parool" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Lülita osakesed sisse" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "Topeltklõpsa \"Hüppamist\" et sisse lülitada lendamine" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "Topeltklõpsa \"Hüppamist\" et sisse lülitada lendamine" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Lülita valu sisse" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Anisotroopne Filtreerimine" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Edasi" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Lülita kõik välja" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "Sisse lülitatud" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Mäng" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Seljakott" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Hüppamine" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Vasak Menüü" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Menüü" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Menüü" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Põlvkonna kaardid" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Põlvkonna kaardid" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Põlvkonna kaardid" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Põlvkonna kaardid" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Põlvkonna kaardid" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Põlvkonna kaardid" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Menüü" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Väga hea kvaliteet" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion Scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Preload inventory textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Kauguse valik" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Parem Menüü" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Mängupilt" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Üksikmäng" + +#: src/settings_translation_file.cpp +msgid "Server URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server port" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Avatud serverite nimekiri:" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Avatud serverite nimekiri:" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Varjutajad" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Ilus valgustus" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Hiilimine" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Vali graafika:" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Tri-Linear Filtreerimine" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "Vajuta nuppu" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Põhiline arendaja" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Hääle volüüm" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Uhked puud" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#, fuzzy +#~ msgid "Game Name" +#~ msgstr "Mäng" + +#~ msgid "GAMES" +#~ msgstr "MÄNGUD" + +#~ msgid "new game" +#~ msgstr "uus mängu" + +#~ msgid "EDIT GAME" +#~ msgstr "MUUDA MÄNGU" + +#, fuzzy +#~ msgid "Remove selected mod" +#~ msgstr "Eemalda valitud muutus" + +#, fuzzy +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Lisama muutus" + +#~ msgid "Favorites:" +#~ msgstr "Lemmikud:" + +#~ msgid "Name" +#~ msgstr "Nimi" + +#~ msgid "Password" +#~ msgstr "Parool" + +#~ msgid "SETTINGS" +#~ msgstr "Seaded" + +#~ msgid "Preload item visuals" +#~ msgstr "Lae asjade visuaale" + +#, fuzzy +#~ msgid "Finite Liquid" +#~ msgstr "Löppev vedelik" + +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " #~ msgstr "" -#~ "Vasak hiireklõps: Liiguta kõiki asju, Parem hiireklõps: Liiguta üksikut " -#~ "asja" +#~ "Hoiatus: Mõned modifikatsioonid pole sätitud veel.\n" +#~ "Need lülitatakse sisse kohe pärast sätete salvestamist." -#~ msgid "is required by:" -#~ msgstr "Seda vajavad:" - -#~ msgid "Configuration saved. " -#~ msgstr "Konfiguratsioon salvestatud. " - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Hoiatus: Konfiguratsioon pole kindel." - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Maailma loomine ebaõnnestus: Nimes esineb keelatud tähti" - -#~ msgid "Multiplayer" -#~ msgstr "Mitmikmäng" - -#~ msgid "Advanced" -#~ msgstr "Arenenud sätted" - -#~ msgid "Show Public" -#~ msgstr "Näita avalikke" - -#~ msgid "Show Favorites" -#~ msgstr "Näita lemmikuid" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Jäta IP lahter tühjaks et alustada LAN serverit." - -#~ msgid "Create world" -#~ msgstr "Loo maailm" - -#~ msgid "Address required." -#~ msgstr "IP on vajalkik." - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Maailma kustutamine ebaõnnestus: Maailma pole valitud" - -#~ msgid "Files to be deleted" -#~ msgstr "Failid mida kustutada" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Maailma loomine ebaõnnestus: Mängu ei leitud" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Maailma konfigureerimine ebaõnnestus: Pole midagi valitud" - -#~ msgid "Failed to delete all world files" -#~ msgstr "Kõigi maailma failide kustutamine ebaõnnestus" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Hoiatus: Mõned konfigureeritud modifikatsioonid on kaotsi läinud.\n" +#~ "Nende sätted kustutatakse kui salvestada konfiguratsioon." #~ msgid "" #~ "Default Controls:\n" @@ -1081,81 +3577,68 @@ msgstr "Vale mängu ID." #~ "- ESC: Menüü\n" #~ "- T: Jututupa\n" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " +#~ msgid "Failed to delete all world files" +#~ msgstr "Kõigi maailma failide kustutamine ebaõnnestus" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Maailma konfigureerimine ebaõnnestus: Pole midagi valitud" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Maailma loomine ebaõnnestus: Mängu ei leitud" + +#~ msgid "Files to be deleted" +#~ msgstr "Failid mida kustutada" + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Maailma kustutamine ebaõnnestus: Maailma pole valitud" + +#~ msgid "Address required." +#~ msgstr "IP on vajalkik." + +#~ msgid "Create world" +#~ msgstr "Loo maailm" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Jäta IP lahter tühjaks et alustada LAN serverit." + +#~ msgid "Show Favorites" +#~ msgstr "Näita lemmikuid" + +#~ msgid "Show Public" +#~ msgstr "Näita avalikke" + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Maailma loomine ebaõnnestus: Nimes esineb keelatud tähti" + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Hoiatus: Konfiguratsioon pole kindel." + +#~ msgid "Configuration saved. " +#~ msgstr "Konfiguratsioon salvestatud. " + +#~ msgid "is required by:" +#~ msgstr "Seda vajavad:" + +#~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" -#~ "Hoiatus: Mõned konfigureeritud modifikatsioonid on kaotsi läinud.\n" -#~ "Nende sätted kustutatakse kui salvestada konfiguratsioon." - -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Hoiatus: Mõned modifikatsioonid pole sätitud veel.\n" -#~ "Need lülitatakse sisse kohe pärast sätete salvestamist." - -#~ msgid "Exit to OS" -#~ msgstr "Välju mängust" - -#~ msgid "Exit to Menu" -#~ msgstr "Välju menüüsse" - -#~ msgid "Sound Volume" -#~ msgstr "Hääle volüüm" - -#~ msgid "Change Password" -#~ msgstr "Vaheta parooli" - -#~ msgid "Continue" -#~ msgstr "Jätka" - -#~ msgid "You died." -#~ msgstr "Sa surid." +#~ "Vasak hiireklõps: Liiguta kõiki asju, Parem hiireklõps: Liiguta üksikut " +#~ "asja" #, fuzzy -#~ msgid "Finite Liquid" -#~ msgstr "Löppev vedelik" +#~ msgid "Downloading" +#~ msgstr "Alla" -#~ msgid "Preload item visuals" -#~ msgstr "Lae asjade visuaale" - -#~ msgid "SETTINGS" -#~ msgstr "Seaded" - -#~ msgid "Password" -#~ msgstr "Parool" - -#~ msgid "Name" -#~ msgstr "Nimi" - -#~ msgid "Favorites:" -#~ msgstr "Lemmikud:" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Aktiveerimiseks varjud, nad vajavad OpenGL draiver." #, fuzzy -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Lisama muutus" +#~ msgid "Reset singleplayer world" +#~ msgstr "Üksikmäng" #, fuzzy -#~ msgid "Remove selected mod" -#~ msgstr "Eemalda valitud muutus" - -#~ msgid "EDIT GAME" -#~ msgstr "MUUDA MÄNGU" - -#~ msgid "new game" -#~ msgstr "uus mängu" +#~ msgid "Opaque Water" +#~ msgstr "Läbipaistmatu vesi" #, fuzzy -#~ msgid "edit game" -#~ msgstr "Muuda mängu" - -#~ msgid "Games" -#~ msgstr "Mängud" - -#~ msgid "GAMES" -#~ msgstr "MÄNGUD" - -#, fuzzy -#~ msgid "Game Name" -#~ msgstr "Mäng" +#~ msgid "Opaque Leaves" +#~ msgstr "Läbipaistmatu vesi" diff --git a/po/fr/minetest.po b/po/fr/minetest.po index 8b65af0f..1b8cdc6b 100644 --- a/po/fr/minetest.po +++ b/po/fr/minetest.po @@ -7,158 +7,207 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" -"PO-Revision-Date: 2014-12-14 17:34+0100\n" -"Last-Translator: Calinou \n" -"Language-Team: Français <>\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-07-17 22:49+0200\n" +"Last-Translator: Jean-Patrick G. \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 1.7-dev\n" +"X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "Une erreur est survenue avec un script Lua, comme un mod :" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "Une erreur est survenue :" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Menu principal" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "OK" -#: builtin/mainmenu/dlg_config_world.lua:26 -msgid "World:" -msgstr "Sélectionner un monde :" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Rejoindre" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -msgid "Hide Game" -msgstr "Cacher le jeu" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" -msgstr "Cacher le contenu de packs de mods" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Chargement..." -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" -msgstr "Mod :" +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 -msgid "Depends:" -msgstr "Dépend de :" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Enregistrer" +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" +"Rechargez la liste des serveurs publics et vérifiez votre connexion Internet." + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "Annuler" -#: builtin/mainmenu/dlg_config_world.lua:68 -msgid "Enable MP" -msgstr "Activer le pack de mods" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Dépend de :" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Désactiver le pack de mods" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "activé" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Activer le pack de mods" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Tout activer" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Nom du monde" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Graine" - -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Générateur de carte" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Jeu" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Créer" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "Vous n'avez pas de sous-jeux installés." - -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "Avertissement : le jeu minimal est fait pour les développeurs." +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Cacher le jeu" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "Téléchargez un sosu-jeu, comme minetest_game, depuis minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Cacher le pack de mods" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod :" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Enregistrer" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Sélectionner un monde :" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "activé" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Le monde \"$1\" existe déjà" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Créer" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Téléchargez un sous-jeu, comme minetest_game, depuis minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Téléchargez-en un depuis minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Jeu" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Générateur de carte" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Nom du monde manquant ou aucun jeu sélectionné" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Graine" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "Avertissement : le jeu minimal est fait pour les développeurs." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Nom du monde" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Vous n'avez pas de sous-jeux installés." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" -msgstr "Êtes-vous sûr de supprimer \"$1\" ?" +msgstr "Êtes-vous sûr de vouloir supprimer \"$1\" ?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "Oui" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Non, bien sûr que non !" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr : n'a pas pu supprimer \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr : chemin de mod invalide \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Non, bien sûr que non !" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Oui" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Supprimer le monde \"$1\" ?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Non" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Renommer le pack de mods :" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Accepter" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" -msgstr "Installer un mod : fichier : \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Renommer le pack de mods :" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -166,379 +215,391 @@ msgstr "" "\n" "Installer un mod : type de fichier non supporté \"$1\" ou archive cassée" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "N'a pas pu installer $1 à $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Installer un mod : fichier : \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Installer un mod : impossible de trouver le vrai nom du mod pour : $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Installer un mod : impossible de trouver un nom de dossier valide pour le " "pack de mods $1" -#: builtin/mainmenu/modmgr.lua:386 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Installer un mod : impossible de trouver le vrai nom du mod pour : $1" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "Non trié" - -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 -msgid "Search" -msgstr "Rechercher" - -#: builtin/mainmenu/store.lua:125 -msgid "Downloading" -msgstr "Télécharement" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "veuillez patienter..." - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "Installé avec succès :" - -#: builtin/mainmenu/store.lua:163 -msgid "Shortname:" -msgstr "Nom court :" - -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "ok" - -#: builtin/mainmenu/store.lua:476 -msgid "Rating" -msgstr "Note" - -#: builtin/mainmenu/store.lua:501 -msgid "re-Install" -msgstr "Réinstaller" - -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "Installer" - -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "Fermer le store" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "Téléchargement de $1, veuillez patienter..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Installer" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "Page $1 sur $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Crédits" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Note" -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "Développeurs principaux" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Rechercher" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Nom :" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Installé avec succès :" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Non trié" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Réinstaller" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Contributeurs actifs" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Développeurs principaux" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Crédits" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Anciens contributeurs" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Anciens développeurs" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Mods installés :" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Dépôt de mods en ligne" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Pas de description disponible" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Information du mod :" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Renommer" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Désinstaller le pack de mods sélectionné" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Désinstaller le mod sélectionné" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Sélectionner un fichier de mod :" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "Mods" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" -msgstr "Adresse / Port" +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Pas de description disponible" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Nom / Mot de passe" +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Renommer" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Liste de serveurs publics" +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Sélectionner un fichier de mod :" -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Supprimer" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Désinstaller le mod" -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Rejoindre" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Désinstaller le pack de mods" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Address / Port :" +msgstr "Adresse / Port :" + +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "Client" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Nouveau" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Rejoindre" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -msgid "Configure" -msgstr "Configurer" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Démarrer" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Sélectionner un monde :" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" msgstr "Mode créatif" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" -msgstr "Activer les dégâts" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Dégâts activés" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Public" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Supprimer" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Nom / Mot de passe :" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Liste de serveurs publics" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "Combat activé" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "Adresse à assigner" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Configurer" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Mode créatif" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Activer les dégâts" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nom / Mot de passe" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Nouveau" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "Aucun monde créé ou sélectionné !" + +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "Port" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Port du serveur" +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Public" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Sélectionner un monde :" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Serveur" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" -msgstr "Êtes-vous sûr de remettre à zéro votre monde solo ?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Port du serveur" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" -msgstr "Non !" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Démarrer" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" -msgstr "Lumière douce" +#: builtin/mainmenu/tab_settings.lua +msgid "\"" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" -msgstr "Activer les particules" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" -msgstr "Nuages 3D" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:140 - -msgid "Fancy Trees" -msgstr "Arbres détaillés" - -#: builtin/mainmenu/tab_settings.lua:142 -msgid "Opaque Water" -msgstr "Eau opaque" - -#: builtin/mainmenu/tab_settings.lua:144 - -msgid "Connected Glass" -msgstr "Verre connecté" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" -msgstr "Redémarrez Minetest pour que le changement de pilote prenne effet" - -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-mapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Filtrage anisotrope" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Filtrage bilinéaire" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Filtrage trilinéaire" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "Shaders" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Changer les touches" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Reset singleplayer world" -msgstr "Remettre le monde solo à zéro" +msgid "Disabled" +msgstr "Désactiver le pack de mods" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" -msgstr "Échelle des menus" - -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " -msgstr "Échelle appliquée aux menus :" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Enabled" +msgstr "activé" + +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 -msgid "Bumpmapping" -msgstr "Bump mapping" +#: builtin/mainmenu/tab_settings.lua +msgid "Games" +msgstr "Jeux" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" -msgstr "Générer des normal maps" +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" -msgstr "Occlusion parallaxe" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" -msgstr "Liquides animés" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" -msgstr "Feuilles animées" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" -msgstr "Plantes animées" +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Pour activer les shaders, le pilote OpenGL doit être utilisé." +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Sélectionner" + +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Réglages" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "Voler" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -msgid "Start Singleplayer" -msgstr "Démarrer la partie solo" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Configurer les mods" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "Menu principal" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Démarrer la partie solo" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Jouer" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Solo" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Sélectionner un pack de textures :" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Pas d'information disponible" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Sélectionner un pack de textures :" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "Packs de textures" -#: src/client.cpp:2726 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Erreur de connexion (perte de connexion ?)" + +#: src/client.cpp +msgid "Done!" +msgstr "Terminé !" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Initialisation des nodes" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Initialisation des nodes..." + +#: src/client.cpp msgid "Item textures..." msgstr "Textures d'objets..." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +msgid "Loading textures..." +msgstr "Chargement des textures..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Construction des shaders..." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "Erreur de connexion (perte de connexion ?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Le jeu \" n'a pas pu être trouvé" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "gamespec invalide." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menu principal" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Pas de monde sélectionné et pas d'adresse fournie. Rien à faire." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Nom du joueur trop long." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "Le chemin du monde spécifié n'existe pas : " + +#: src/fontengine.cpp +#, fuzzy msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "Réapparaître" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "Définitions d'objets..." - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "Définitions des blocs..." - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "Média..." - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr " Ko/s" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr " Mo/s" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." @@ -546,498 +607,3007 @@ msgstr "" "\n" "Voir debug.txt pour plus d'information." -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +msgid "Change Keys" +msgstr "Changer les touches" + +#: src/game.cpp +msgid "Change Password" +msgstr "Changer mot de passe" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Connexion au serveur..." + +#: src/game.cpp +msgid "Continue" +msgstr "Continuer" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Création du client..." + +#: src/game.cpp +msgid "Creating server..." +msgstr "Création du serveur..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Contrôles:\n" +"- ZQSD : se déplacer\n" +"- Espace : sauter/grimper\n" +"- Maj. : marcher prudemment/descendre\n" +"- A : lâcher l'objet en main\n" +"- I : inventaire\n" +"- Souris : tourner/regarder\n" +"- Souris gauche : creuser/attaquer\n" +"- Souris droite : placer/utiliser\n" +"- Molette souris : sélectionner objet\n" +"- T : discuter\n" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "Quitter vers le menu" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "Quitter le jeu" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "Définitions d'objets..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "Ko/s" + +#: src/game.cpp +msgid "Media..." +msgstr "Média..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "Mo/s" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "Définitions des blocs..." + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Procéder" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "Résolution de l'adresse..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Ressusciter" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Fermeture du jeu..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Volume du son" + +#: src/game.cpp +msgid "You died." +msgstr "Vous êtes mort." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "Entrer " -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "Raccourcis" +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "ok" -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "\"Use\" = descendre (escalade)" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Double appui sur \"saut\" pour voler" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "Touche déjà utilisée" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "appuyez sur une touche" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "Avancer" - -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "Reculer" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 -msgid "Left" -msgstr "Gauche" - -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Droite" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Utiliser" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Sauter" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "Marcher" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "Lâcher" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "Inventaire" - -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp msgid "Chat" -msgstr "Messagerie" +msgstr "Chatter" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "Commande" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "Console" -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "Voler" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Double-appui sur \"saut\" pour voler" -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "Mode rapide" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Jeter" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "Mode noclip" +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Avancer" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "Distance de rendu" +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventaire" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Sauter" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Touche déjà utilisée" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "Raccourcis" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Gauche" + +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Imprimer stacks" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" -msgstr "Ancien mot de passe" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Distance d'affichage" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" -msgstr "Nouveau mot de passe" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Droite" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" -msgstr "Confirmer mot de passe" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Marcher" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "Mode cinématique" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Mode rapide" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Voler" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Mode sans collision" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Utiliser" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "appuyez sur une touche" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Changer" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Confirmer mot de passe" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Nouveau mot de passe" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Ancien mot de passe" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Les mots de passe ne correspondent pas !" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "Volume du son :" - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Quitter" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Bouton gauche" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Volume du son : " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Bouton du milieu" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Bouton droit" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "Bouton X 1" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "Retour en arrière" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "Vider" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "Retour" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tabulation" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "Bouton X 2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Verr. maj." - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Contrôle" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Menu" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Pause" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Majuscule" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "Convertir" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Échap" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "Fin" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Origine" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "Changer de mode" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Suivant" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Précédent" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Espace" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Bas" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Exécuter" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Imprimer" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Sélectionner" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Haut" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Aide" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Insérer" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "Capture d'écran" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "Windows gauche" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "Applications" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Pavé num. 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Pavé num. 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "Windows droite" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Mise en veille" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Pavé num. 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Pavé num. 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Pavé num. 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Pavé num. 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Pavé num. 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Pavé num. 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Pavé num. *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Pavé num. +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Pavé num. -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Pavé num. /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Pavé num. 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Pavé num. 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Verr. pavé num." - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Verr. défilement" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Majuscule gauche" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Majuscule droite" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Contrôle gauche" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Menu gauche" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Contrôle droite" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Menu droite" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Virgule" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "Moins" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "Point" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Plus" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "Attente" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "Retour en arrière" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Verr Maj" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Vider" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Virgule" + +#: src/keycode.cpp +msgid "Control" +msgstr "Contrôle" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convertir" + +#: src/keycode.cpp msgid "CrSel" msgstr "Vider sélection" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "Bas" + +#: src/keycode.cpp +msgid "End" +msgstr "Fin" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Écraser l'OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Échap" + +#: src/keycode.cpp +#, fuzzy msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "Exécuter" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Aide" + +#: src/keycode.cpp +msgid "Home" +msgstr "Origine" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insérer" + +#: src/keycode.cpp +#, fuzzy +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +#, fuzzy +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +#, fuzzy +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Bouton gauche" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Contrôle gauche" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Menu gauche" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Shift gauche" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Windows gauche" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menu" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Bouton du milieu" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Moins" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Changer de mode" + +#: src/keycode.cpp +msgid "Next" +msgstr "Suivant" + +#: src/keycode.cpp +#, fuzzy +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Verr Num" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Pavé num. *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Pavé num. +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Pavé num. -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Pavé num. /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Pavé num. 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Pavé num. 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Pavé num. 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Pavé num. 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Pavé num. 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Pavé num. 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Pavé num. 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Pavé num. 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Pavé num. 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Pavé num. 9" + +#: src/keycode.cpp +#, fuzzy msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pause" + +#: src/keycode.cpp +msgid "Period" +msgstr "Point" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plus" + +#: src/keycode.cpp +msgid "Print" +msgstr "Imprimer" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Précédent" + +#: src/keycode.cpp +msgid "Return" +msgstr "Retour" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Bouton droit" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Contrôle droite" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Menu droite" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Shift droite" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Windows droite" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Verr. défilement" + +#: src/keycode.cpp +msgid "Select" +msgstr "Sélectionner" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Mise en veille" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Capture d'écran" + +#: src/keycode.cpp +msgid "Space" +msgstr "Espace" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tabulation" + +#: src/keycode.cpp +msgid "Up" +msgstr "Haut" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "Bouton X 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "Bouton X 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoomer" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "Nuages 3D" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D mode" +msgstr "Voler" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "Avancé" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Filtrage anisotrope" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Reculer" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Filtrage bilinéaire" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Adresse à assigner" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Build inside player" +msgstr "Multijoueur" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "Bump mapping" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Changer les touches" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Changer les touches" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Mode créatif" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Mode créatif" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "Nuages 3D" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" msgstr "Menu principal" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Commande" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Verre connecté" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Connexion au serveur..." + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Console" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Console" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Console" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Contrôle" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Activer les dégâts" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default game" +msgstr "éditer le jeu" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Nouveau mot de passe" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Particules" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "Double-appui sur \"saut\" pour voler" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "Double-appui sur \"saut\" pour voler" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "Dépôt de mods en ligne" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Activer les dégâts" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "needs_fallback_font" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Aucun filtrage" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fly key" +msgstr "Voler" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Avancer" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "GUI scaling filter" +msgstr "Taille des menus" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Generate normalmaps" +msgstr "Normal mapping" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Désactiver le pack de mods" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "activé" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Jeu" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Inventaire" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Sauter" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Menu gauche" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Menu principal" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Menu principal" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Générateur de carte" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Générateur de carte" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Générateur de carte" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Générateur de carte" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Générateur de carte" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Générateur de carte" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Menu" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Mip-mapping" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Node highlighting" +msgstr "Eclairage des nodes" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "Occlusion parallaxe" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion" +msgstr "Occlusion parallaxe" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion Scale" +msgstr "Occlusion parallaxe" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion bias" +msgstr "Occlusion parallaxe" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion iterations" +msgstr "Occlusion parallaxe" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion mode" +msgstr "Occlusion parallaxe" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion strength" +msgstr "Occlusion parallaxe" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Player name" msgstr "Nom du joueur trop long." -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Erreur de connexion (perte de connexion ?)" +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Pas de monde sélectionné et pas d'adresse fournie. Rien à faire." +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "Le chemin du monde spécifié n'existe pas :" +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Le jeu \" n'a pas pu être trouvé" +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "gamespec invalide." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Chargement des textures..." -#~ msgid "Left click: Move all items, Right click: Move single item" +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Distance d'affichage" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Menu droite" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Capture d'écran" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Démarrer la partie solo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Serveur" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Port du serveur" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "Port du serveur" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Serveur" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Port du serveur" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Liste de serveurs publics" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Liste de serveurs publics" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Shaders" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Lumière douce" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Marcher" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of generated normalmaps." +msgstr "Normal mapping" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Packs de textures" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Filtrage trilinéaire" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "appuyez sur une touche" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Anciens développeurs" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Volume du son" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Walking speed" +msgstr "Feuilles mouvantes" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving Nodes" +msgstr "Feuilles mouvantes" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Feuilles mouvantes" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving plants" +msgstr "Plantes mouvantes" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water" +msgstr "Liquides mouvants" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water height" +msgstr "Liquides mouvants" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water length" +msgstr "Liquides mouvants" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water speed" +msgstr "Liquides mouvants" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Rendering:" +#~ msgstr "Affichage :" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Redémarrez Minetest pour que le changement du pilote prenne effet" + +#~ msgid "Game Name" +#~ msgstr "Nom du jeu" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr : Impossible de copier le mod \"$1\" dans le jeu \"$2\"" + +#~ msgid "GAMES" +#~ msgstr "JEUX" + +#~ msgid "Mods:" +#~ msgstr "Mods :" + +#~ msgid "new game" +#~ msgstr "nouveau jeu" + +#~ msgid "EDIT GAME" +#~ msgstr "MODIFIER LE JEU" + +#~ msgid "Remove selected mod" +#~ msgstr "Supprimer le mod sélectionné" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Ajouter un mod" + +#~ msgid "CLIENT" +#~ msgstr "CLIENT" + +#~ msgid "Favorites:" +#~ msgstr "Favoris :" + +#~ msgid "START SERVER" +#~ msgstr "DÉMARRER LE SERVEUR" + +#~ msgid "Name" +#~ msgstr "Nom" + +#~ msgid "Password" +#~ msgstr "Mot de passe" + +#~ msgid "SETTINGS" +#~ msgstr "PARAMÈTRES" + +#~ msgid "Preload item visuals" +#~ msgstr "Précharger les objets" + +#~ msgid "Finite Liquid" +#~ msgstr "Liquides limités" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "PARTIE SOLO" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "PACKS DE TEXTURES" + +#~ msgid "MODS" +#~ msgstr "MODS" + +#~ msgid "Add mod:" +#~ msgstr "Ajouter un mod :" + +#~ msgid "Local install" +#~ msgstr "Installation locale" + +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " #~ msgstr "" -#~ "Clic gauche : déplacer tous les objets -- Clic droit : déplacer un objet" +#~ "Attention : certains mods ne sont pas encore configurés.\n" +#~ "Ils seront activés par défaut quand vous enregistrerez la configuration. " -#~ msgid "is required by:" -#~ msgstr "est requis par :" - -#~ msgid "Configuration saved. " -#~ msgstr "Configuration enregistrée. " - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Attention : configuration incorrecte. " - -#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " #~ msgstr "" -#~ "Impossible de créer le monde : le nom contient des caractères invalides" +#~ "Attention : certains mods configurés sont introuvables.\n" +#~ "Leurs réglages seront effacés quand vous enregistrerez la configuration. " -#~ msgid "Multiplayer" -#~ msgstr "Multijoueur" - -#~ msgid "Advanced" -#~ msgstr "Avancé" - -#~ msgid "Show Public" -#~ msgstr "Voir les serveurs publics" - -#~ msgid "Show Favorites" -#~ msgstr "Voir les serveurs favoris" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Laisser l'adresse vide pour lancer un serveur local." - -#~ msgid "Create world" -#~ msgstr "Créer un monde" - -#~ msgid "Address required." -#~ msgstr "Adresse requise." - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Impossible de supprimer le monde : rien n'est sélectionné" - -#~ msgid "Files to be deleted" -#~ msgstr "Fichiers à supprimer" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Impossible de créer le monde : aucun jeu n'est présent" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Impossible de configurer ce monde : aucune sélection active" - -#~ msgid "Failed to delete all world files" -#~ msgstr "Tous les fichiers du monde n'ont pu être supprimés" +#~ msgid "Delete map" +#~ msgstr "Supprimer la carte" #~ msgid "" #~ "Default Controls:\n" @@ -1064,149 +3634,97 @@ msgstr "gamespec invalide." #~ "- Échap : ce menu\n" #~ "- T : discuter\n" -#~ msgid "Delete map" -#~ msgstr "Supprimer la carte" +#~ msgid "Failed to delete all world files" +#~ msgstr "Tous les fichiers du monde n'ont pu être supprimés" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Impossible de configurer ce monde : aucune sélection active" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Impossible de créer le monde : aucun jeu n'est présent" + +#~ msgid "Files to be deleted" +#~ msgstr "Fichiers à supprimer" + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Impossible de supprimer le monde : rien n'est sélectionné" + +#~ msgid "Address required." +#~ msgstr "Adresse requise." + +#~ msgid "Create world" +#~ msgstr "Créer un monde" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Laisser l'adresse vide pour lancer un serveur local." + +#~ msgid "Show Favorites" +#~ msgstr "Voir les serveurs favoris" + +#~ msgid "Show Public" +#~ msgstr "Voir les serveurs publics" + +#~ msgid "Cannot create world: Name contains invalid characters" #~ msgstr "" -#~ "Attention : certains mods configurés sont introuvables.\n" -#~ "Leurs réglages seront effacés quand vous enregistrerez la configuration. " +#~ "Impossible de créer le monde : le nom contient des caractères invalides" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Attention : configuration incorrecte. " + +#~ msgid "Configuration saved. " +#~ msgstr "Configuration enregistrée. " + +#~ msgid "is required by:" +#~ msgstr "est requis par :" + +#~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" -#~ "Attention : certains mods ne sont pas encore configurés.\n" -#~ "Ils seront activés par défaut quand vous enregistrerez la configuration. " +#~ "Clic gauche : déplacer tous les objets -- Clic droit : déplacer un objet" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Contrôles:\n" -#~ "- ZQSD : se déplacer\n" -#~ "- Espace : sauter/grimper\n" -#~ "- Maj. : marcher prudemment/descendre\n" -#~ "- A : lâcher l'objet en main\n" -#~ "- I : inventaire\n" -#~ "- Souris : tourner/regarder\n" -#~ "- Souris gauche : creuser/attaquer\n" -#~ "- Souris droite : placer/utiliser\n" -#~ "- Molette souris : sélectionner objet\n" -#~ "- T : discuter\n" +#~ msgid " MB/s" +#~ msgstr " Mo/s" -#~ msgid "Exit to OS" -#~ msgstr "Quitter le jeu" +#~ msgid " KB/s" +#~ msgstr " Ko/s" -#~ msgid "Exit to Menu" -#~ msgstr "Quitter vers le menu" +#~ msgid "Downloading" +#~ msgstr "Téléchargement" -#~ msgid "Sound Volume" -#~ msgstr "Volume du son" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Pour activer les shaders, le pilote OpenGL doit être utilisé." -#~ msgid "Change Password" -#~ msgstr "Changer mot de passe" +#~ msgid "Texturing:" +#~ msgstr "Textures :" -#~ msgid "Continue" -#~ msgstr "Continuer" +#~ msgid "Simple Leaves" +#~ msgstr "Arbres simples" -#~ msgid "You died." -#~ msgstr "Vous êtes mort." +#~ msgid "Scaling factor applied to menu elements: " +#~ msgstr "Taille appliquée aux menus : " -#~ msgid "Shutting down stuff..." -#~ msgstr "Quitter le jeu..." +#~ msgid "Reset singleplayer world" +#~ msgstr "Réinitialiser le monde" -#~ msgid "Connecting to server..." -#~ msgstr "Connexion au serveur..." +#~ msgid "Opaque Water" +#~ msgstr "Eau opaque" -#~ msgid "Resolving address..." -#~ msgstr "Résolution de l'adresse..." +#~ msgid "Opaque Leaves" +#~ msgstr "Arbres minimaux" -#~ msgid "Creating client..." -#~ msgstr "Création du client..." +#~ msgid "No!!!" +#~ msgstr "Non !" -#~ msgid "Creating server...." -#~ msgstr "Création du serveur..." +#~ msgid "No Mipmap" +#~ msgstr "Sans MIP map" -#~ msgid "Loading..." -#~ msgstr "Chargement..." +#~ msgid "Mipmap + Aniso. Filter" +#~ msgstr "MIP map + anisotropie" -#~ msgid "Local install" -#~ msgstr "Installation locale" +#~ msgid "Mipmap" +#~ msgstr "MIP mapping" -#~ msgid "Add mod:" -#~ msgstr "Ajouter un mod :" +#~ msgid "Fancy Leaves" +#~ msgstr "Arbres détaillés" -#~ msgid "MODS" -#~ msgstr "MODS" - -#~ msgid "TEXTURE PACKS" -#~ msgstr "PACKS DE TEXTURES" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "PARTIE SOLO" - -#~ msgid "Finite Liquid" -#~ msgstr "Liquides limités" - -#~ msgid "Preload item visuals" -#~ msgstr "Précharger les objets" - -#~ msgid "SETTINGS" -#~ msgstr "PARAMÈTRES" - -#~ msgid "Password" -#~ msgstr "Mot de passe" - -#~ msgid "Name" -#~ msgstr "Nom" - -#~ msgid "START SERVER" -#~ msgstr "DÉMARRER LE SERVEUR" - -#~ msgid "Favorites:" -#~ msgstr "Favoris :" - -#~ msgid "CLIENT" -#~ msgstr "CLIENT" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Ajouter un mod" - -#~ msgid "Remove selected mod" -#~ msgstr "Supprimer le mod sélectionné" - -#~ msgid "EDIT GAME" -#~ msgstr "MODIFIER LE JEU" - -#~ msgid "new game" -#~ msgstr "nouveau jeu" - -#~ msgid "edit game" -#~ msgstr "éditer le jeu" - -#~ msgid "Mods:" -#~ msgstr "Mods :" - -#~ msgid "Games" -#~ msgstr "Jeux" - -#~ msgid "GAMES" -#~ msgstr "JEUX" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr : Impossible de copier le mod \"$1\" dans le jeu \"$2\"" - -#~ msgid "Game Name" -#~ msgstr "Nom du jeu" +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr "Êtes-vous sûr de vouloir réinitialiser votre monde ?" diff --git a/po/hu/minetest.po b/po/hu/minetest.po index d49bc782..faccede7 100644 --- a/po/hu/minetest.po +++ b/po/hu/minetest.po @@ -7,1129 +7,3674 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" -"PO-Revision-Date: 2013-08-11 03:05+0200\n" -"Last-Translator: Sasikaa Lacikaa \n" -"Language-Team: LANGUAGE \n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-09-21 14:55+0200\n" +"Last-Translator: way-hu \n" +"Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 1.4-dev\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.4\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "Hiba történt egy Lua scriptben (egy modban):" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "Hiba történt:" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "Főmenü" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" +msgstr "OK" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "Újracsatlakozás" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "A szerver újracsatlakozást kért:" + +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Betöltés..." + +#: builtin/mainmenu/common.lua +#, fuzzy +msgid "Protocol version mismatch. " +msgstr "Protokol verzió eltérés, szerver " + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:26 -#, fuzzy -msgid "World:" -msgstr "Világ kiválasztása:" - -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -#, fuzzy -msgid "Hide Game" -msgstr "Játék" - -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" +"Próbáld újra engedélyezni a nyilvános szerverlistát és ellenőrizd az " +"internetkapcsolatot." + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 -#, fuzzy -msgid "Depends:" -msgstr "Attól függ:" +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Mentés" - -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "Mégse" -#: builtin/mainmenu/dlg_config_world.lua:68 -#, fuzzy -msgid "Enable MP" -msgstr "Összes engedélyezve" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Függőségek:" -#: builtin/mainmenu/dlg_config_world.lua:70 -#, fuzzy +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" -msgstr "Összes tiltva" +msgstr "Csomag letiltás" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "Engedélyezve" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Csomag engedélyez" -#: builtin/mainmenu/dlg_config_world.lua:82 -#, fuzzy +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" -msgstr "Összes engedélyezve" +msgstr "Összes engedélyezése" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Világ neve" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" +"A \"$1\" mod engedélyezése nem sikerült, mert rossz karaktereket tartalmaz. " +"Csak az [0-z0-9_] karakterek engedélyezettek." -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Játék elrejtése" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Játék" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Modpakk tartalom elrejtése" -#: builtin/mainmenu/dlg_create_world.lua:63 +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod:" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Mentés" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Világ:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "Engedélyez" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "\"$1\" nevű világ már létezik" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Létrehozás" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Tölts le egy al-játékot (pl. minetest_game) a minetest.net-ről" -#: builtin/mainmenu/dlg_create_world.lua:69 +#: builtin/mainmenu/dlg_create_world.lua msgid "Download one from minetest.net" -msgstr "" +msgstr "Letöltés a minetest.net-ről" -#: builtin/mainmenu/dlg_create_world.lua:72 +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Játék" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Térkép generátor" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No worldname given or no game selected" +msgstr "Nincs megadva a világ neve, vagy nincs kiválasztva játék" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Seed" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Warning: The minimal development test is meant for developers." msgstr "" +"Figyelmeztetés: A \"minimal development test\" csak fejlesztőknek ajánlott." -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Világ neve" -#: builtin/mainmenu/dlg_create_world.lua:97 -#, fuzzy -msgid "A world named \"$1\" already exists" -msgstr "Nem sikerült a viág létrehozása: A világ neve már használva van" +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Nincsenek aljátékok telepítve." -#: builtin/mainmenu/dlg_create_world.lua:116 -msgid "No worldname given or no game selected" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" -msgstr "" +msgstr "Biztosan törölni akarod: \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Modmgr: failed to delete \"$1\"" +msgstr "Modmgr: \"$1\" törlése meghiúsult" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Modmgr: invalid modpath \"$1\"" +msgstr "Modmgr: érvénytelen mod útvonal: \"$1\"" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Persze, hogy nem!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua msgid "Yes" msgstr "Igen" -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 -msgid "Modmgr: failed to delete \"$1\"" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:45 -msgid "Modmgr: invalid modpath \"$1\"" -msgstr "" - -#: builtin/mainmenu/dlg_delete_world.lua:24 -#, fuzzy +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" -msgstr "Világ törlése" +msgstr "\"$1\" világ törlése?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Nem" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" -msgstr "Elfogadva" +msgstr "Elfogad" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" -msgstr "" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Modpakk átnevezése:" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" +"\n" +"Mod telepítés: \"$1\" nem támogatott fájltípus, vagy hibás archívum" -#: builtin/mainmenu/modmgr.lua:363 -#, fuzzy +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" -msgstr "A világ betöltése közben hiba" +msgstr "$1 telepítése meghiúsult" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Mod telepítés: fájl: \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Mod telepítése: nem található megfelelő mod név ehhez: $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" +"Mod telepítése: nem található megfelelő mappanév ehhez a modpakk-hoz: $1" -#: builtin/mainmenu/modmgr.lua:386 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "" - -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 -msgid "Search" -msgstr "" - -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Le" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:163 -#, fuzzy -msgid "Shortname:" -msgstr "Világ neve" - -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 -msgid "Rating" -msgstr "" - -#: builtin/mainmenu/store.lua:501 -msgid "re-Install" -msgstr "" - -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "" - -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua msgid "Close store" -msgstr "" +msgstr "Áruház bezárása" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "$1 letöltése, kérlek várj..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Telepítés" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" -msgstr "" +msgstr "Oldal $1 ennyiből: $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Stáblista" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Értékelés" -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Keresés" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Rövid név:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Sikeresen telepítve:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Rendezetlen" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Újratelepítés" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" -msgstr "" +msgstr "Tevékeny hozzájárulók" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Belső fejlesztők" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Készítők" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" -msgstr "" +msgstr "Korábbi hozzájárulók" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Korábbi belső fejlesztők" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" -msgstr "" +msgstr "Telepített modok:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" -msgstr "" +msgstr "Mod ismertető:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:121 -#, fuzzy -msgid "Select Mod File:" -msgstr "Világ kiválasztása:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" -msgstr "" +msgstr "Modok" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" -msgstr "Cím/Port" +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Nincs elérhető mod leírás" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Név/jelszó" +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Átnevez" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -#, fuzzy -msgid "Public Serverlist" -msgstr "Publikus Szerver Lista:" +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Mod fájl kiválasztása:" -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Törlés" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Kiválasztott mod törlése" -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Kiválasztott modpakk törlése" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Address / Port :" +msgstr "Cím / Port:" + +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp +msgid "Client" +msgstr "Kliens" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "Csatlakozás" -#: builtin/mainmenu/tab_multiplayer.lua:252 -msgid "Client" -msgstr "" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "Kreatív mód" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Új" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Sérülés engedélyezve" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Törlés" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Név / jelszó:" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Nyilvános szerverlista" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "PvP engedélyezve" + +#: builtin/mainmenu/tab_server.lua +msgid "Bind Address" +msgstr "Bind Address" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Configure" msgstr "Beállítás" -#: builtin/mainmenu/tab_server.lua:29 -#, fuzzy -msgid "Start Game" -msgstr "Játék indítása / Csatlakozás" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Világ kiválasztása:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Creative Mode" msgstr "Kreatív mód" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Enable Damage" msgstr "Sérülés engedélyezése" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Publikus" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Név/jelszó" -#: builtin/mainmenu/tab_server.lua:45 -msgid "Bind Address" -msgstr "" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Új" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "Nincs létrehozva, vagy kiválasztva világ!" + +#: builtin/mainmenu/tab_server.lua msgid "Port" -msgstr "" +msgstr "Port" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "" +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Nyilvános" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Világ kiválasztása:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" +msgstr "Szerver" + +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Szerver port" + +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Játék indítása" + +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" -msgstr "Simított megvilágítás" - -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" -msgstr "Részecskék engedélyezése" - -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" -msgstr "3D Felhők" - -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Szép fák" - -#: builtin/mainmenu/tab_settings.lua:142 -#, fuzzy -msgid "Opaque Water" -msgstr "Átlátszó víz" - -#: builtin/mainmenu/tab_settings.lua:144 -#, fuzzy -msgid "Connected Glass" -msgstr "Csatlakozás" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-mapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Anzisztrópikus szűrés" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Bi-Linear Szűrés" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Tri-Linear Szűrés" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "Shaderek" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" -msgstr "Gomb választása" +msgstr "Gombok változtatása" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Reset singleplayer world" -msgstr "Egyjátékos mód" +msgid "Disabled" +msgstr "Csomag letiltás" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Bumpmapping" -msgstr "Mip-mapping" +msgid "Enabled" +msgstr "Engedélyez" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Games" +msgstr "Játék" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Kiválaszt" + +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Beállítások" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Egyjátékos mód" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 -#, fuzzy +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" -msgstr "Beállítás" +msgstr "Modok beállítása" -#: builtin/mainmenu/tab_simple_main.lua:191 -#, fuzzy +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" -msgstr "Fő menü" +msgstr "Főmenü" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Egyjátékos mód indítása" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Játék" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Egyjátékos mód" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" -msgstr "" +msgstr "Nincs elérhető információ" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "Semmi" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Textúracsomag kiválasztása:" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" -msgstr "" +msgstr "Textúra pakkok" -#: src/client.cpp:2726 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Csatlakozási hiba (idő lejárt?)" + +#: src/client.cpp +msgid "Done!" +msgstr "Kész!" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Csomópontok inicializálása" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Csomópontok inicializálása..." + +#: src/client.cpp msgid "Item textures..." -msgstr "Tárgy textúrák..." +msgstr "Elem textúrák..." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +msgid "Loading textures..." +msgstr "Textúrák betöltése..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Shaderek újraépítése..." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "Csatlakozási hiba (idő lejárt?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Nem lehet betölteni, vagy nem található játék \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Nem valós játék spec." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Főmenü" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Nincs világ kiválasztva és nincs cím megadva. Nincs mit tenni." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Túl hosszú játékosnév." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "A megadott világ útvonala nem létezik: " + +#: src/fontengine.cpp +#, fuzzy msgid "needs_fallback_font" -msgstr "" +msgstr "needs_fallback_font" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "Újra éledés" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "" - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." msgstr "" +"\n" +"Részletekért tekintsd meg a debug.txt fájlt." -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +msgid "Change Keys" +msgstr "Gombok változtatása" + +#: src/game.cpp +msgid "Change Password" +msgstr "Jelszó változtatás" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Csatlakozás a szerverhez..." + +#: src/game.cpp +msgid "Continue" +msgstr "Tovább" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Kliens létrehozása..." + +#: src/game.cpp +msgid "Creating server..." +msgstr "Szerver létrehozása..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Alapértelmezett irányítás:\n" +"- WASD: Mozgás\n" +"- Space: Ugrás/Mászás\n" +"- Shift: Lopakodás/Lefele menés\n" +"- Q: Tárgyak eldobása\n" +"- I: Invertory\n" +"- Egér: Forgás/Nézelődés\n" +"- Egér Bal-gomb: Ásás/Ütés\n" +"- Egér jobb-gomb: Helyezés/Használat\n" +"- Egér görgő: Tárgyak kiválasztása\n" +"- T: Beszélgetés\n" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" +"Alapértelmezett irányítás:\n" +"Nem látható menü:\n" +"- egy érintés: gomb aktiválás\n" +"- dupla érintés: helyez/használat\n" +"- ujj csúsztatás: körbenéz\n" +"Menü/Inventory látható:\n" +"- dupla érintés (külső):\n" +" -->bezár\n" +"- stack, vagy slot érintése:\n" +" --> stack mozgatása\n" +"- érint&megfogás, érintés 2. ujjal\n" +" --> egy elem slotba helyezése\n" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "Kilépés a menübe" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "Kilépés az OP-rendszerbe" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "Elem definíciók..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "KiB/mp" + +#: src/game.cpp +msgid "Media..." +msgstr "Média..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "MiB/mp" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "Csomópont definíciók..." + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" -msgstr "Elfogadva" +msgstr "Folytatás" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "Cím feloldása..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Újraéledés" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Leállítás..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Hangerő" + +#: src/game.cpp +msgid "You died." +msgstr "Meghaltál." + +#: src/guiFormSpecMenu.cpp msgid "Enter " -msgstr "" +msgstr "Belépés " -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "" -"Gombkiosztás. (Amíg ez a menü fejlesztve van, el van távolítva a minetest." -"conf-ból)" +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "Ok" -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "\"Használat\" = Lemászás" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Duplán nyomd meg az \"ugrás\" gombot ahhoz hogy repülj" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "A gomb már használatban van" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "Nyomj meg egy gombot" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" +#: src/guiKeyChangeMenu.cpp +msgid "Backward" msgstr "Vissza" -#: src/guiKeyChangeMenu.cpp:398 -msgid "Backward" -msgstr "Előre" - -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 -msgid "Left" -msgstr "Bal" - -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Jobb" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Használni" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Ugrás" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "Lopakodás" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "Dobás" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "Invertory" - -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "Beszélgetés" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "Parancs" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "Konzol" -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "Repülés bekapcsolása" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Az \"ugrás\" gomb duplán a repüléshez" -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "Gyorsaság bekapcsolása" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Eldobás" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "váltás noclip-re" +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Előre" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "Távolság választása" +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "Inventory" +msgstr "Inventory" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Ugrás" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "A gomb már használatban van" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" +"Gombkiosztás. (Ha elfuserálod ezt a menüt, távolíts el néhány cuccot a " +"minetest.conf-ból)" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Bal" + +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Stacks nyomtatása" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" -msgstr "Régi jelszó" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Látótávolság választása" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" -msgstr "Új jelszó" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Jobb" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" -msgstr "Jelszó visszaigazolás" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Lopakodás" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Toggle Cinematic" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Gyorsaság bekapcsolása" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Repülés bekapcsolása" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Váltás noclip-re" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Használat" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "Nyomj meg egy gombot" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Változtat" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Jelszó megerősítés" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Új jelszó" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Régi jelszó" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" -msgstr "Nem eggyeznek a jelszavak!" +msgstr "Nem egyeznek a jelszavak!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "Hangerő: " - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Kilépés" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Bal gomb" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Hangerő: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Középső gomb" +#: src/keycode.cpp +msgid "Apps" +msgstr "Alkalmazások" -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Jobb gomb" +#: src/keycode.cpp +#, fuzzy +msgid "Attn" +msgstr "Attn" -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "X gomb 1" - -#: src/keycode.cpp:225 +#: src/keycode.cpp msgid "Back" msgstr "Vissza" -#: src/keycode.cpp:225 +#: src/keycode.cpp +msgid "Capital" +msgstr "Nagybetű" + +#: src/keycode.cpp msgid "Clear" msgstr "Törlés" -#: src/keycode.cpp:225 -msgid "Return" -msgstr "Enter" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tabulátor" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "X Gomb 2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Kapital" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Controll" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Kanaa" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Menü" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Pillanat-álj" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "váltás" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "Konvertálás" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Kilépés" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Befejezés" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junjaa" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Kanjii" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "Nem konvertált" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "Vége" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Otthon" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "Mód váltás" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Következő" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Priorr" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Hely" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Le" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Tömörít" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Nyomtat" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Kiválaszt" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Fel" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Segítség" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Beilleszt" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "Verzió" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "Bal Windows" - -#: src/keycode.cpp:234 -msgid "Apps" -msgstr "Prog" - -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Numerikus billentyű 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Numerikus billentyű 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "Jobb Windows" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Alvás" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Numerikus billentyű 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Numerikus billentyű 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Numerikus billentyű 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Numerikus billentyű 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Numerikus billentyű 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Numerikus billentyű 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Numerikus billentyű *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Numerikus billentyű +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Numerikus billentyű -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Numerikus billentyű /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Numerikus billentyű 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Numerikus billentyű 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Numerikus lock" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Skroll Lock" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Bal Shift" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Jobb Shift" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Bal Controll" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Bal menü" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Jobb Controll" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Jobb menü" - -#: src/keycode.cpp:244 +#: src/keycode.cpp msgid "Comma" msgstr "Vessző" -#: src/keycode.cpp:244 +#: src/keycode.cpp +#, fuzzy +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Konvertálás" + +#: src/keycode.cpp +#, fuzzy +msgid "CrSel" +msgstr "CrSel" + +#: src/keycode.cpp +msgid "Down" +msgstr "Le" + +#: src/keycode.cpp +msgid "End" +msgstr "Vége" + +#: src/keycode.cpp +#, fuzzy +msgid "Erase OEF" +msgstr "Erase OEF" + +#: src/keycode.cpp +msgid "Escape" +msgstr "Kilépés" + +#: src/keycode.cpp +#, fuzzy +msgid "ExSel" +msgstr "ExSel" + +#: src/keycode.cpp +msgid "Execute" +msgstr "Végrehajt" + +#: src/keycode.cpp +msgid "Final" +msgstr "Befejezés" + +#: src/keycode.cpp +msgid "Help" +msgstr "Segítség" + +#: src/keycode.cpp +msgid "Home" +msgstr "Otthon" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Beilleszt" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junjaa" + +#: src/keycode.cpp +#, fuzzy +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanjii" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Bal gomb" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Bal Controll" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Bal menü" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Bal Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Bal Windows" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menü" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Középső gomb" + +#: src/keycode.cpp msgid "Minus" -msgstr "Minusz" +msgstr "Mínusz" -#: src/keycode.cpp:244 +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Mód váltás" + +#: src/keycode.cpp +msgid "Next" +msgstr "Következő" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nem konvertált" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Numlock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numerikus billentyű *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numerikus billentyű +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numerikus billentyű -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numerikus billentyű /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numerikus billentyű 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numerikus billentyű 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numerikus billentyű 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numerikus billentyű 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numerikus billentyű 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numerikus billentyű 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numerikus billentyű 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numerikus billentyű 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numerikus billentyű 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numerikus billentyű 9" + +#: src/keycode.cpp +#, fuzzy +msgid "OEM Clear" +msgstr "OEM Clear" + +#: src/keycode.cpp +#, fuzzy +msgid "PA1" +msgstr "PA1" + +#: src/keycode.cpp +msgid "Pause" +msgstr "Szünet" + +#: src/keycode.cpp msgid "Period" -msgstr "tizedes" +msgstr "Pont" -#: src/keycode.cpp:244 +#: src/keycode.cpp msgid "Plus" msgstr "Plusz" -#: src/keycode.cpp:248 -msgid "Attn" -msgstr "Attnn" +#: src/keycode.cpp +msgid "Print" +msgstr "Nyomtat" -#: src/keycode.cpp:248 -msgid "CrSel" -msgstr "CrSell" +#: src/keycode.cpp +msgid "Prior" +msgstr "Elsődleges" -#: src/keycode.cpp:249 -msgid "Erase OEF" -msgstr "Erase OEFF" +#: src/keycode.cpp +msgid "Return" +msgstr "Enter" -#: src/keycode.cpp:249 -msgid "ExSel" -msgstr "ExSell" +#: src/keycode.cpp +msgid "Right Button" +msgstr "Jobb gomb" -#: src/keycode.cpp:249 -msgid "OEM Clear" -msgstr "OEM Clearr" +#: src/keycode.cpp +msgid "Right Control" +msgstr "Jobb Control" -#: src/keycode.cpp:249 -msgid "PA1" -msgstr "PA11" +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Jobb menü" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Jobb Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Jobb Windows" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "ScrollLock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Kiválaszt" + +#: src/keycode.cpp +#, fuzzy +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Alvás" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Pillanatkép" + +#: src/keycode.cpp +msgid "Space" +msgstr "Szóköz" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tabulátor" + +#: src/keycode.cpp +msgid "Up" +msgstr "Fel" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X gomb 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X Gomb 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Nagyítás" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Fő menü" - -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." msgstr "" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Csatlakozási hiba (Idő lejárt?)" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "3D felhők" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Nincs kiválasztott világ, nincs cím. Nincs mit tenni." - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " +#: src/settings_translation_file.cpp +msgid "3D mode" msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Nem található, vagy nem betöltött játék \"" +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Nem valós játék spec." +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Ball gomb: Tárgyak mozgatása, Jobb gomb: egy tárgyat mozgat" +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" -#~ msgid "is required by:" -#~ msgstr "kell neki:" +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" -#~ msgid "Configuration saved. " -#~ msgstr "Beállítások mentve. " +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Figyelem: A beállítások nem egyformák. " +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Nem sikerült a világ létrehozása: A névben nem jó karakterek vannak" +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" -#~ msgid "Multiplayer" -#~ msgstr "Többjátékos mód" +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" -#~ msgid "Advanced" -#~ msgstr "Haladó" +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" -#~ msgid "Show Public" -#~ msgstr "Publikus mutatása" +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" -#~ msgid "Show Favorites" -#~ msgstr "Kedvencek mutatása" +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Hagyd el a nevét, hogy helyi szervert indíts." +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "Haladó" -#~ msgid "Create world" -#~ msgstr "Világ létrehozása" +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" -#~ msgid "Address required." -#~ msgstr "Cím szükséges." +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Nem törölhető a világ: Nincs kiválasztva" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Anzisztrópikus szűrés" -#~ msgid "Files to be deleted" -#~ msgstr "A fájl törölve lett" +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" -#~ msgid "Cannot create world: No games found" -#~ msgstr "Nem sikerült a világot létrehozni: Nem található a játék" +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Nem sikerült a világ beállítása: Nincs kiválasztva" +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" -#~ msgid "Failed to delete all world files" -#~ msgstr "Hiba az összes világ törlése közben" +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Alap beállítások:\n" -#~ "- WASD: Mozgás\n" -#~ "- Space: Ugrás/Mászás\n" -#~ "- Shift: Lopakodás/Lefele menés\n" -#~ "- Q: Tárgyak eldobása\n" -#~ "- I: Invertory\n" -#~ "- Egér: Forgás/Nézelődés\n" -#~ "- Egér Bal-gomb: Ásás/ütés\n" -#~ "- Egér jobb-gomb: elhejezés/használat\n" -#~ "- Egér görgő: Tárgyak kiválasztása\n" -#~ "- T: Beszélgetés\n" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Vissza" -#~ msgid "Exit to OS" -#~ msgstr "Kilépés az OP-rendszerbe" +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" -#~ msgid "Exit to Menu" -#~ msgstr "Kilépés a menübe" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Bi-lineáris szűrés" -#~ msgid "Sound Volume" -#~ msgstr "Hangerő" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Bind Address" -#~ msgid "Change Password" -#~ msgstr "Jelszó változtatás" +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" -#~ msgid "Continue" -#~ msgstr "Tovább" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Build inside player" +msgstr "Többjátékos mód" -#~ msgid "You died." -#~ msgstr "Meghaltál." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bumpmapping" +msgstr "Bumpmapping" -#~ msgid "Shutting down stuff..." -#~ msgstr "Dolog leállítása..." +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" -#~ msgid "Connecting to server..." -#~ msgstr "Csatlakozás a szerverhez..." +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" -#~ msgid "Resolving address..." -#~ msgstr "Cím létrehozása..." +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" -#~ msgid "Creating client..." -#~ msgstr "Kliens létrehozása..." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Gombok változtatása" -#~ msgid "Creating server...." -#~ msgstr "Szerver létrehozása..." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Gombok változtatása" -#~ msgid "Loading..." -#~ msgstr "Betöltés..." +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Kreatív mód" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Kreatív mód" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "3D felhők" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" +msgstr "Főmenü" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Parancs" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Tiszta (csatlakozó) üveg" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Csatlakozás a szerverhez..." + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Konzol" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Konzol" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Konzol" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Control" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Sérülés engedélyezése" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Új jelszó" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Részecskék engedélyezése" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "Az \"ugrás\" gomb duplán a repüléshez" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "Az \"ugrás\" gomb duplán a repüléshez" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "Online mod tároló" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Sérülés engedélyezése" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "needs_fallback_font" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Nincs szűrés" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Előre" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "GUI scaling filter" +msgstr "Felhasználói felület méretaránya" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Generate normalmaps" +msgstr "Normálfelületek generálása" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Csomag letiltás" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "Engedélyez" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Játék" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Inventory" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Ugrás" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Bal menü" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Főmenü" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Főmenü" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Térkép generátor" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Térkép generátor" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Térkép generátor" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Térkép generátor" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Térkép generátor" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Térkép generátor" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Menü" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Mip-mapping" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Node highlighting" +msgstr "Node kiemelés" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax Occlusion" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion Scale" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion bias" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion iterations" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion mode" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion strength" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Player name" +msgstr "Túl hosszú játékosnév." + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Textúrák betöltése..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Látótávolság választása" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Jobb menü" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Pillanatkép" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Egyjátékos mód indítása" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Szerver" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Szerver port" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "Szerver port" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Szerver" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Szerver port" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Nyilvános szerverlista" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Nyilvános szerverlista" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Shaderek" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Simított megvilágítás" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Lopakodás" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of generated normalmaps." +msgstr "Normálfelületek generálása" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Textúra pakkok" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Tri-lineáris szűrés" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "Nyomj meg egy gombot" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Korábbi belső fejlesztők" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Hangerő" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Walking speed" +msgstr "Hullámzó levelek" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving Nodes" +msgstr "Hullámzó levelek" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Hullámzó levelek" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving plants" +msgstr "Hullámzó növények" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water" +msgstr "Hullámzó víz" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water height" +msgstr "Hullámzó víz" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water length" +msgstr "Hullámzó víz" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water speed" +msgstr "Hullámzó víz" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Rendering:" +#~ msgstr "Renderelés:" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "A driver változások életbe lépéséhez indítsd újra a Minetestet" #, fuzzy -#~ msgid "Finite Liquid" -#~ msgstr "Végtelen folyadék" - -#~ msgid "Preload item visuals" -#~ msgstr "Előretöltött tárgy láthatóság" - -#, fuzzy -#~ msgid "Password" -#~ msgstr "Régi jelszó" +#~ msgid "Game Name" +#~ msgstr "Játék" #~ msgid "Favorites:" #~ msgstr "Kedvencek:" #, fuzzy -#~ msgid "Games" -#~ msgstr "Játék" +#~ msgid "Password" +#~ msgstr "Régi jelszó" + +#~ msgid "Preload item visuals" +#~ msgstr "Előretöltött tárgy láthatóság" #, fuzzy -#~ msgid "Game Name" -#~ msgstr "Játék" +#~ msgid "Finite Liquid" +#~ msgstr "Végtelen folyadék" + +#~ msgid "Failed to delete all world files" +#~ msgstr "Hiba az összes világ törlése közben" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Nem sikerült a világ beállítása: Nincs kiválasztva" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Nem sikerült a világot létrehozni: Nem található a játék" + +#~ msgid "Files to be deleted" +#~ msgstr "A fájl törölve lett" + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Nem törölhető a világ: Nincs kiválasztva" + +#~ msgid "Address required." +#~ msgstr "Cím szükséges." + +#~ msgid "Create world" +#~ msgstr "Világ létrehozása" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Hagyd el a nevét, hogy helyi szervert indíts." + +#~ msgid "Show Favorites" +#~ msgstr "Kedvencek mutatása" + +#~ msgid "Show Public" +#~ msgstr "Publikus mutatása" + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Nem sikerült a világ létrehozása: A névben nem jó karakterek vannak" + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Figyelem: A beállítások nem egyformák. " + +#~ msgid "Configuration saved. " +#~ msgstr "Beállítások mentve. " + +#~ msgid "is required by:" +#~ msgstr "kell neki:" + +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Ball gomb: Tárgyak mozgatása, Jobb gomb: egy tárgyat mozgat" + +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "Le" + +#, fuzzy +#~ msgid "Touchthreshold (px)" +#~ msgstr "Touchthreshold (px)" + +#, fuzzy +#~ msgid "Touch free target" +#~ msgstr "Touch free target" + +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "A shaderek engedélyezéséhez OpenGL driver használata szükséges." + +#~ msgid "Texturing:" +#~ msgstr "Textúrázás:" + +#~ msgid "Simple Leaves" +#~ msgstr "Egyszerű levelek" + +#~ msgid "Scaling factor applied to menu elements: " +#~ msgstr "A méretarány alkalmazva a menü elemekre: " + +#~ msgid "Reset singleplayer world" +#~ msgstr "Egyjátékos világ visszaállítása" + +#~ msgid "Opaque Water" +#~ msgstr "Áttetsző víz" + +#~ msgid "Opaque Leaves" +#~ msgstr "Áttetsző levelek" + +#~ msgid "No!!!" +#~ msgstr "Nem!!!" + +#, fuzzy +#~ msgid "No Mipmap" +#~ msgstr "No Mipmap" + +#, fuzzy +#~ msgid "Mipmap + Aniso. Filter" +#~ msgstr "Mipmap + Aniso. Filter" + +#, fuzzy +#~ msgid "Mipmap" +#~ msgstr "Mipmap" + +#~ msgid "Fancy Leaves" +#~ msgstr "Szép levelek" + +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr "Biztosan visszaállítod az egyjátékos világod?" + +#~ msgid "Antialiasing:" +#~ msgstr "Élsimítás:" + +#~ msgid "8x" +#~ msgstr "8x" + +#~ msgid "4x" +#~ msgstr "4x" + +#~ msgid "2x" +#~ msgstr "2x" diff --git a/po/id/minetest.po b/po/id/minetest.po index 21361979..362ee8ec 100644 --- a/po/id/minetest.po +++ b/po/id/minetest.po @@ -3,167 +3,217 @@ # This file is distributed under the same license as the PACKAGE package. # Muhammad Rifqi Priyo Susanto , 2014. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" -"PO-Revision-Date: 2015-03-02 00:21+0700\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-09-06 08:59+0200\n" "Last-Translator: Muhammad Rifqi Priyo Susanto " "\n" -"Language-Team: Bahasa Indonesia <>\n" +"Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "Kesalahan muncul:" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Menu Utama" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Oke" -#: builtin/mainmenu/dlg_config_world.lua:26 -msgid "World:" -msgstr "Dunia:" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Sambung" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Memuat..." + +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" +"Cobalah mengaktifkan ulang daftar server publik dan cek koneksi internet " +"Anda." + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Cancel" +msgstr "Batal" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Bergantung pada:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable MP" +msgstr "Nonaktifkan PM" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Aktifkan PM" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable all" +msgstr "Aktifkan semua" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua msgid "Hide Game" msgstr "" "Sembunyikan\n" "permainan" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 +#: builtin/mainmenu/dlg_config_world.lua msgid "Hide mp content" msgstr "" "Sembunyikan\n" "konten pm" -#: builtin/mainmenu/dlg_config_world.lua:46 +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "Mod:" -#: builtin/mainmenu/dlg_config_world.lua:48 -msgid "Depends:" -msgstr "Bergantung pada:" - -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp msgid "Save" msgstr "Simpan" -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 -msgid "Cancel" -msgstr "Batal" +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Dunia:" -#: builtin/mainmenu/dlg_config_world.lua:68 -msgid "Enable MP" -msgstr "Aktifkan PM" - -#: builtin/mainmenu/dlg_config_world.lua:70 -msgid "Disable MP" -msgstr "Nonaktifkan PM" - -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua msgid "enabled" msgstr "diaktifkan" -#: builtin/mainmenu/dlg_config_world.lua:82 -msgid "Enable all" -msgstr "Aktifkan semua" - -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Nama dunia" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Seed" - -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Generator peta" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Permainan" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Buat" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "Kamu tidak punya sub-permainan terpasang" - -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "Unduh satu dari minetest.net" - -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "Peringatan: minimal development test ditujukan untuk pengembang." - -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "Unduh sebuah sub-permainan, seperti minetest_game, dari minetest.net" - -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Dunia bernama \"$1\" telah ada" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Buat" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Unduh sebuah sub-permainan, seperti minetest_game, dari minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Unduh satu dari minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Permainan" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Generator peta" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Tidak ada nama atau permainan yang dipilih" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Seed" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "Peringatan: minimal development test ditujukan untuk pengembang." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Nama dunia" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Kamu tidak punya sub-permainan terpasang." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Kamu yakin ingin menghapus \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "Ya" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Tentu tidak!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Pengelola mod: gagal untuk menghapus \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Pengelola mod: jalur mod tidak sah" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Tentu tidak!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Ya" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Hapus Dunia \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Tidak" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Ganti Nama Paket Mod:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Setuju" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" -msgstr "Pemasangan Mod: berkas: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Ganti Nama Paket Mod:" -#: builtin/mainmenu/modmgr.lua:343 -#, fuzzy +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" @@ -171,384 +221,391 @@ msgstr "" "\n" "Pemasangan Mod: tipe berkas tidak didukung \"$1\" atau kerusakan arsip" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Gagal untuk memasang $1 ke $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Pemasangan Mod: berkas: \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Pemasangan Mod: tidak dapat mencari nama yang sebenarnya dari: $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Pemasangan Mod: tidak dapat mencari nama folder yang sesuai untuk paket mod " "$1" -#: builtin/mainmenu/modmgr.lua:386 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Pemasangan Mod: tidak dapat mencari nama yang sebenarnya dari: $1" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "Tidak diurutkan" - -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 -msgid "Search" -msgstr "Cari" - -#: builtin/mainmenu/store.lua:125 -msgid "Downloading" -msgstr "Mengunduh" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "mohon tunggu..." - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "Berhasil dipasang:" - -#: builtin/mainmenu/store.lua:163 -#, fuzzy -msgid "Shortname:" -msgstr "Nama pendek:" - -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "oke" - -#: builtin/mainmenu/store.lua:476 -msgid "Rating" -msgstr "Peringkat" - -#: builtin/mainmenu/store.lua:501 -msgid "re-Install" -msgstr "Pasang ulang" - -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "Pasang" - -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "Tutup toko" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "Mengunduh $1, mohon tunggu..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Pasang" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "Halaman $1 dari $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Penghargaan" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Peringkat" -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "Pengembang Inti" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Cari" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Nama pendek:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Berhasil dipasang:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Tidak diurutkan" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Pasang ulang" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Kontributor Aktif" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Pengembang Inti" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Penghargaan" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Kontributor Sebelumnya" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Pengembang Inti Sebelumnya" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Mod Terpasang:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Gudang mod daring" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Tidak ada deskripsi mod tersedia" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Informasi mod:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Ganti Nama" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Copot pemasangan paket mod terpilih" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Copot pemasangan mod terpilih" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Pilih Berkas Mod:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "Mod" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" -msgstr "Alamat/Port" +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Tidak ada deskripsi mod tersedia" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Nama/Kata sandi" +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Ganti Nama" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Daftar Server Publik" +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Pilih Berkas Mod:" -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Hapus" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Copot pemasangan mod terpilih" -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Sambung" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Copot pemasangan paket mod terpilih" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Address / Port :" +msgstr "Alamat / Port:" + +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "Klien" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Baru" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Sambung" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "Mode kreatif" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Kerusakan diaktifkan" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Hapus" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Nama / Kata sandi:" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Daftar Server Publik" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "PvP diaktifkan" + +#: builtin/mainmenu/tab_server.lua +msgid "Bind Address" +msgstr "Alamat Sambungan" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Configure" msgstr "Konfigurasi" -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Mulai Permainan" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Pilih Dunia:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Creative Mode" msgstr "Mode Kreatif" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Enable Damage" msgstr "Aktifkan Kerusakan" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Publik" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nama/Kata sandi" -#: builtin/mainmenu/tab_server.lua:45 -msgid "Bind Address" -msgstr "" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Baru" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "Tidak ada dunia atau permainan yang dipilih!" + +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "Port" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Port Server" +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Publik" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Pilih Dunia:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Server" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" -msgstr "Yakin ingin mengaturulang dunia anda?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Port Server" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" -msgstr "Tidak!!!" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Mulai Permainan" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" -msgstr "Pencahayaan Halus" +#: builtin/mainmenu/tab_settings.lua +msgid "\"" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" -msgstr "Aktifkan Partikel" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" -msgstr "Awan 3D" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Pohon Indah" - -#: builtin/mainmenu/tab_settings.lua:142 -msgid "Opaque Water" -msgstr "Air Buram" - -#: builtin/mainmenu/tab_settings.lua:144 -#, fuzzy -msgid "Connected Glass" -msgstr "Kaca Tersambung" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" -msgstr "Mulai ulang minetest untuk beralih ke driver yang dipilih" - -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-Mapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Anisotropic Filtering" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Bi-Linear Filtering" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Tri-Linear Filtering" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "Shaders" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Ubah tombol" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Reset singleplayer world" -msgstr "Atur ulang dunia pemain tunggal" +msgid "Disabled" +msgstr "Nonaktifkan PM" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" -msgstr "Skala antarmuka" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " -msgstr "Faktor skala yang diatur untuk elemen menu: " - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" -msgstr "Bebas sentuhan" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" -msgstr "Batas sentuhan (px)" - -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Bumpmapping" -msgstr "Bumpmapping" +msgid "Enabled" +msgstr "diaktifkan" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" -msgstr "Gunakan Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" -msgstr "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Games" +msgstr "Permainan" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" -msgstr "Air Berombak" +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" -msgstr "Daun Melambai" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" -msgstr "Tanaman Berayun" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Untuk mengaktifkan shaders OpenGL driver harus digunakan." +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Select" + +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Pengaturan" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "Mode terbang" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Mulai Pemain Tunggal" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 -#, fuzzy +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Konfigurasi mod" -#: builtin/mainmenu/tab_simple_main.lua:191 -#, fuzzy +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "Beranda" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Mulai Pemain Tunggal" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Mainkan" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Pemain Tunggal" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Pilih paket tekstur:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Tidak ada informasi tersedia" -#: builtin/mainmenu/tab_texturepacks.lua:114 -#, fuzzy +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Pilih paket tekstur:" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "Paket Tekstur" -#: src/client.cpp:2726 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Koneksi rusak (terlalu lama?)" + +#: src/client.cpp +msgid "Done!" +msgstr "Selesai!" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp msgid "Item textures..." msgstr "Tekstur barang..." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +msgid "Loading textures..." +msgstr "Memuat tekstur..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Membangun ulang shaders..." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "Koneksi rusak (terlalu lama?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Tidak dapat mencari atau memuat permainan \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Spesifikasi permainan tidak sah." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menu Utama" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Tidak ada dunia yang dipilih dan tidak ada alamat yang diberikan." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Nama pemain terlalu panjang." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "Jalur dunia yang diberikan tidak ada: " + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "Bangkit" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "Definisi barang..." - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "Definisi node..." - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "Media..." - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr " KB/detik" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr " MB/detik" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." @@ -556,444 +613,2990 @@ msgstr "" "\n" "Cek debug.txt untuk detail." -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +msgid "Change Keys" +msgstr "Ubah Tombol" + +#: src/game.cpp +msgid "Change Password" +msgstr "Ganti Kata Sandi" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Menghubungkan ke server..." + +#: src/game.cpp +msgid "Continue" +msgstr "Lanjutkan" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Membuat klien..." + +#: src/game.cpp +msgid "Creating server..." +msgstr "Membuat server..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Kontrol Bawaan:\n" +"- WASD: bergerak\n" +"- Space: lompat/panjat\n" +"- Shift: merayap/turun\n" +"- Q: jatuhkan barang\n" +"- I: inventaris\n" +"- Mouse: belok/melihat\n" +"- Mouse kiri: gali/pukul\n" +"- Mouse kanan: taruh/pakai\n" +"- Roda mouse: pilih barang\n" +"- T: obrolan\n" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" +"Kontrol Bawaan:\n" +"Tanpa menu yang tampak:\n" +"- ketuk sekali: tekan tombol\n" +"- ketuk ganda: taruh/pakai\n" +"- geser: melihat sekitar\n" +"Menu/Inventaris tampak:\n" +"- ketuk ganda (di luar):\n" +" -->tutup\n" +"- tekan tumpukan, tekan wadah:\n" +" --> pindah tumpukan\n" +"- tekan&geser, ketuk jari kedua\n" +" --> taruh barang tunggal ke wadah\n" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "Kembali ke Menu Utama" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "Tutup Aplikasi" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "Definisi barang..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "KiB/s" + +#: src/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "MiB/s" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "Definisi node..." + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Lanjut" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "Mencari alamat..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Bangkit" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Mematikan..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Volume Suara" + +#: src/game.cpp +msgid "You died." +msgstr "Anda mati." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "Masuk " -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "" -"Pengaturan tombol. (Jika menu ini kacau, hapus pengaturan kontrol dari minetest.conf)" +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "oke" -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "\"Pakai\" = turun" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Tekan ganda \"lompat\" untuk\n" -"beralih terbang" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "Tombol telah terpakai" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "tekan tombol" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "Maju" - -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "Mundur" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 -msgid "Left" -msgstr "Kiri" - -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Kanan" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Pakai" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Lompat" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "Menyelinap" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "Jatuhkan" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "Inventaris" - -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "Obrolan" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "Perintah" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "Konsol" -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "Terbang" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "" +"Tekan ganda \"lompat\" untuk\n" +"beralih terbang" -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "Gerak cepat" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Jatuhkan" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "Tembus blok" +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Maju" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "Jarak pandang" +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventaris" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Lompat" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Tombol telah terpakai" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" +"Pengaturan tombol. (Jika menu ini kacau, hapus pengaturan kontrol dari " +"minetest.conf)" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Kiri" + +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Cetak tumpukan" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" -msgstr "Kata Sandi Lama" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Jarak pandang" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" -msgstr "Kata Sandi Baru" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Kanan" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" -msgstr "Konfirmasi Kata Sandi" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Menyelinap" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Gerak cepat" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Gerak cepat" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Terbang" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Tembus blok" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Pakai" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "tekan tombol" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Ubah" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Konfirmasi Kata Sandi" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Kata Sandi Baru" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Kata Sandi Lama" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Kata sandi tidak cocok!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "Volume Suara: " - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Keluar" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Klik Kiri" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Volume Suara: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Klik Tengah" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Klik Kanan" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "Tombol X 1" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "Backspace" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "Bersihkan" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "Enter" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "Tombol X 2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Caps Lock" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Ctrl" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Alt" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Pause" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "Convert" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Esc" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "Mode Change" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Page Up" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Page Down" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Spasi" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Turun" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Execute" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Print" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Select" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Atas" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Help" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "Snapshot" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "Start Kiri" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "Tombol Menu" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "Start Kanan" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Sleep" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Numpad *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Shift Kiri" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Shift Kanan" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Ctrl Kiri" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Left Menu" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Ctrl Kanan" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Right Menu" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Koma" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "Kurang" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "Titik" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Tambah" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "Backspace" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Caps Lock" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Bersihkan" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Koma" + +#: src/keycode.cpp +msgid "Control" +msgstr "Ctrl" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convert" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "Turun" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Esc" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "Execute" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Help" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Klik Kiri" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Ctrl Kiri" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Left Menu" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Shift Kiri" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Start Kiri" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Alt" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Klik Tengah" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Kurang" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Mode Change" + +#: src/keycode.cpp +msgid "Next" +msgstr "Page Up" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numpad *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numpad +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numpad -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numpad /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pause" + +#: src/keycode.cpp +msgid "Period" +msgstr "Titik" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Tambah" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Page Down" + +#: src/keycode.cpp +msgid "Return" +msgstr "Enter" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Klik Kanan" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Ctrl Kanan" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Right Menu" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Shift Kanan" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Start Kanan" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Select" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Sleep" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Snapshot" + +#: src/keycode.cpp +msgid "Space" +msgstr "Spasi" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Atas" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "Tombol X 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "Tombol X 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "Awan 3D" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D mode" +msgstr "Mode terbang" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Anisotropic Filtering" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Mundur" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Bilinear Filter" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Alamat Sambungan" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "Bumpmapping" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Ubah tombol" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Ubah tombol" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Mode kreatif" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Mode kreatif" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "Awan 3D" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" msgstr "Menu Utama" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Perintah" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Kaca Tersambung" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Menghubungkan ke server..." + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Konsol" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Konsol" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Konsol" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Ctrl" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Aktifkan Kerusakan" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Kata Sandi Baru" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Aktifkan Partikel" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "" +"Tekan ganda \"lompat\" untuk\n" +"beralih terbang" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "" +"Tekan ganda \"lompat\" untuk\n" +"beralih terbang" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "Gudang mod daring" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Aktifkan Kerusakan" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "needs_fallback_font" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Tanpa Filter" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fly key" +msgstr "Mode terbang" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Maju" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "GUI scaling filter" +msgstr "Skala antarmuka" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Generate normalmaps" +msgstr "Gunakan Normalmaps" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Nonaktifkan PM" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "diaktifkan" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Permainan" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Inventaris" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Lompat" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Left Menu" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Menu Utama" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Menu Utama" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Generator peta" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Generator peta" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Generator peta" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Generator peta" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Generator peta" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Generator peta" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Alt" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Mip-Mapping" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion Scale" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion bias" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion iterations" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion mode" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion strength" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Player name" msgstr "Nama pemain terlalu panjang." -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Koneksi rusak (terlalu lama?)" +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Tidak ada dunia yang dipilih dan tidak ada alamat yang diberikan." +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "Jalur dunia yang diberikan tidak ada: " +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Tidak dapat mencari atau memuat permainan \"" +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Spesifikasi permainan tidak sah." \ No newline at end of file +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Memuat tekstur..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Jarak pandang" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Right Menu" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Snapshot" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Mulai Pemain Tunggal" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Port Server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "Port Server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Port Server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Daftar Server Publik" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Daftar Server Publik" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Shaders" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Pencahayaan Halus" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Menyelinap" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of generated normalmaps." +msgstr "Gunakan Normalmaps" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Paket Tekstur" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Trilinear Filter" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "tekan tombol" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Pengembang Inti Sebelumnya" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Volume Suara" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Walking speed" +msgstr "Daun Melambai" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving Nodes" +msgstr "Daun Melambai" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Daun Melambai" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving plants" +msgstr "Tanaman Berayun" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water" +msgstr "Air Berombak" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water height" +msgstr "Air Berombak" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water length" +msgstr "Air Berombak" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water speed" +msgstr "Air Berombak" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Rendering:" +#~ msgstr "Rendering:" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Mulai ulang minetest untuk beralih ke driver yang dipilih" + +#~ msgid " MB/s" +#~ msgstr " MB/detik" + +#~ msgid " KB/s" +#~ msgstr " KB/detik" + +#~ msgid "Downloading" +#~ msgstr "Mengunduh" + +#~ msgid "Touchthreshold (px)" +#~ msgstr "Batas sentuhan (px)" + +#~ msgid "Touch free target" +#~ msgstr "Bebas sentuhan" + +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Untuk mengaktifkan shaders OpenGL driver harus digunakan." + +#~ msgid "Texturing:" +#~ msgstr "Penteksturan:" + +#~ msgid "Simple Leaves" +#~ msgstr "Daun Sederhana" + +#~ msgid "Scaling factor applied to menu elements: " +#~ msgstr "Faktor skala yang diatur untuk elemen menu: " + +#~ msgid "Reset singleplayer world" +#~ msgstr "Atur ulang dunia pemain tunggal" + +#~ msgid "Opaque Water" +#~ msgstr "Air Buram" + +#~ msgid "Opaque Leaves" +#~ msgstr "Daun Opak" + +#~ msgid "No!!!" +#~ msgstr "Tidak!!!" + +#~ msgid "No Mipmap" +#~ msgstr "Tanpa Mipmap" + +#~ msgid "Mipmap + Aniso. Filter" +#~ msgstr "Mipmap + Aniso. Filter" + +#~ msgid "Mipmap" +#~ msgstr "Mipmap" + +#~ msgid "Fancy Leaves" +#~ msgstr "Daun Megah" + +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr "Yakin ingin mengaturulang dunia anda?" diff --git a/po/it/minetest.po b/po/it/minetest.po index ef8ebc58..e8d80539 100644 --- a/po/it/minetest.po +++ b/po/it/minetest.po @@ -7,546 +7,619 @@ msgid "" msgstr "" "Project-Id-Version: Minetest 0.4.9\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" -"PO-Revision-Date: 2014-06-01 19:05+0100\n" -"Last-Translator: Enki \n" -"Language-Team: \n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-08-24 20:44+0200\n" +"Last-Translator: betacentury \n" +"Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.4\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" +"Si è verificato un errore in uno script Lua, come ad esempio un modulo:" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "Si è verificato un errore:" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Menù principale" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Ok" -#: builtin/mainmenu/dlg_config_world.lua:26 -msgid "World:" -msgstr "Mondo:" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Connettere" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -msgid "Hide Game" -msgstr "Nasc. gioco" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" -msgstr "Nasc. cont. pacchetti" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Caricamento..." -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" -msgstr "Mod.:" +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 -msgid "Depends:" -msgstr "Dipendenze:" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Salvare" +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "Annullare" -#: builtin/mainmenu/dlg_config_world.lua:68 -msgid "Enable MP" -msgstr "Att. pacch." +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Dipendenze:" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Disatt. pacch." -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "attivata" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Att. pacch." -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Attivarli tutti" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Nome del mondo" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Seme casuale" - -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Generat. mappe" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Gioco" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Creare" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Nasc. gioco" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Nasc. cont. pacchetti" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod.:" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Salvare" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Mondo:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "attivata" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Esiste già un mondo chiamato \"$1\"" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Creare" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Scarica un sottogioco, come minetest_game, da minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Scaricane uno da minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Gioco" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Generat. mappe" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" "Non è stato fornito nessun nome del mondo oppure non è stato selezionato " "nessun gioco" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Seme casuale" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Nome del mondo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Non hai installato nessun sottogioco." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Siete certi di volere cancellare \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "Sì" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "No, certo che no!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Gestore dei moduli: la cancellazione di \"$1\" è fallita" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Gestore dei moduli: percorso del modulo \"$1\" non valido" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "No, certo che no!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Sì" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Cancellare il mondo \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "No" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Rinominare il pacchetto moduli:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Accettare" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" -msgstr "Installare un modulo: file: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Rinominare il pacchetto moduli:" -#: builtin/mainmenu/modmgr.lua:343 -#, fuzzy +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" "\n" -"Installare un modulo: tipo di file non supportato \"$1\"" +"Installazione modulo: tipo di file non supportato \"$1\"" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "L'installazione di $1 in $2 è fallita" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Installazione modulo: file: \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "" +"Installare un modulo: impossibile trovare il vero nome del modulo per: $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Installare un modulo: impossibile trovare un nome di cartella appropriato " "per il pacchetto moduli $1" -#: builtin/mainmenu/modmgr.lua:386 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "" -"Installare un modulo: impossibile trovare il vero nome del modulo per: $1" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/store.lua +msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Installare" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "Pagina $1 di $2" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Valutazione" + +#: builtin/mainmenu/store.lua msgid "Search" -msgstr "" +msgstr "Cerca" -#: builtin/mainmenu/store.lua:125 -msgid "Downloading" -msgstr "" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Nome del mondo" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Installato con successo:" -#: builtin/mainmenu/store.lua:476 -msgid "Rating" -msgstr "Valutazione" +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Non categorizzato" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "Reinstallare" -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "Installare" - -#: builtin/mainmenu/store.lua:522 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:530 -msgid "Page $1 of $2" -msgstr "Pagina $1 di $2" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Riconoscimenti" - -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "Sviluppatori principali" - -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Contributori attivi" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Sviluppatori principali" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Riconoscimenti" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Contributori precedenti" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +#, fuzzy +msgid "Previous Core Developers" +msgstr "Sviluppatori principali" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Moduli installati:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Archivio in linea" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Nessuna descrizione disponibile per il modulo" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Informazioni sul modulo:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Rinominare" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Disinstallare il pacchetto moduli selezionato" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Disinstallare il modulo selezionato" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Selezionare il file modulo:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "Moduli" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Nessuna descrizione disponibile per il modulo" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Rinominare" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Selezionare il file modulo:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Disinstallare il modulo selezionato" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Disinstallare il pacchetto moduli selezionato" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Address / Port :" msgstr "Indirizzo/Porta" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Nome/Password" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Elenco dei server pubblici" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Cancellare" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Connettere" - -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "Client" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Nuovo" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Connettere" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -msgid "Configure" -msgstr "Configurare" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Avviare il gioco" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Selezionare il mondo:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Creative mode" msgstr "Modalità creativa" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" -msgstr "Abilitare il danno" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Danni abilitati" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Pubblico" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Cancellare" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Nome/Password" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Elenco dei server pubblici" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "PvP enabled" +msgstr "attivata" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Configurare" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Modalità creativa" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Abilitare il danno" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nome/Password" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Nuovo" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +#, fuzzy +msgid "No world created or selected!" msgstr "" +"Non è stato fornito nessun nome del mondo oppure non è stato selezionato " +"nessun gioco" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Porta del server" +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "Porta" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Pubblico" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Selezionare il mondo:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Server" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Porta del server" + +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Avviare il gioco" + +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" -msgstr "Illuminazione armoniosa" - -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" -msgstr "Abilitare le particelle" - -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" -msgstr "Nuvole 3D" - -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Alberi migliori" - -#: builtin/mainmenu/tab_settings.lua:142 -msgid "Opaque Water" -msgstr "Acqua opaca" - -#: builtin/mainmenu/tab_settings.lua:144 -#, fuzzy -msgid "Connected Glass" -msgstr "Connettere" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-Mapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Filtro anisotropico" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Filtro Bi-Lineare" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Filtro Tri-Lineare" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "Shader" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Cambiare i tasti" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Reset singleplayer world" -msgstr "Giocatore singolo" +msgid "Disabled" +msgstr "Disatt. pacch." -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Bumpmapping" -msgstr "Mip-Mapping" +msgid "Enabled" +msgstr "attivata" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +msgid "Games" +msgstr "Giochi" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "E' necessario usare i driver OpenGL per abilitare gli shader." +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Selezionare" + +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Impostazioni" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Giocatore singolo" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 -#, fuzzy +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" -msgstr "Configurare" +msgstr "Config. moduli" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Menù principale" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Giocatore singolo" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Giocare" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Giocatore singolo" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Selezionare un pacchetto di immagini:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Nessuna informazione disponibile" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Selezionare un pacchetto di immagini:" + +#: builtin/mainmenu/tab_texturepacks.lua #, fuzzy msgid "Texturepacks" msgstr "Pacch. immagini" -#: src/client.cpp:2726 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Errore di connessione (scaduta?)" + +#: src/client.cpp +msgid "Done!" +msgstr "Fatto!" + +#: src/client.cpp +#, fuzzy +msgid "Initializing nodes" +msgstr "Inizializzazione nodi" + +#: src/client.cpp +#, fuzzy +msgid "Initializing nodes..." +msgstr "Inizializzazione nodi..." + +#: src/client.cpp msgid "Item textures..." msgstr "Immagini degli oggetti..." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +#, fuzzy +msgid "Loading textures..." +msgstr "Caricamento..." + +#: src/client.cpp +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Risoluzione dell'indirizzo..." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "Errore di connessione (scaduta?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Impossibile trovare o caricare il gioco \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Specifica del gioco non valida." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menù principale" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "" +"Non è stato selezionato nessun mondo e non è stato fornito nessun indirizzo. " +"Niente da fare." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Nome del giocatore troppo lungo." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "Il percorso del mondo fornito non esiste: " + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "Riapparire" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "Definizioni degli oggetti..." - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "Definizioni dei cubi..." - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "Media..." - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." @@ -554,576 +627,2988 @@ msgstr "" "\n" "Controllare debug.txt per i dettagli." -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Cambiare i tasti" + +#: src/game.cpp +msgid "Change Password" +msgstr "Cambiare la password" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Connessione al server..." + +#: src/game.cpp +msgid "Continue" +msgstr "Continuare" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Creazione del client..." + +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "Creazione del server..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Controlli predefiniti:\n" +"- WASD: muoversi\n" +"- Space: saltare/arrampicarsi\n" +"- Shift: strisciare/scendere\n" +"- Q: scartare l'oggetto\n" +"- I: inventario\n" +"- Mouse: girarsi/guardare\n" +"- Tasto sinistro del mouse: scavare/colpire\n" +"- Tasto destro del mouse: posizionare/usare\n" +"- Rotella del mouse: scegliere l'oggetto\n" +"- T: chat\n" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "Tornare al menù" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "Tornare al S.O." + +#: src/game.cpp +msgid "Item definitions..." +msgstr "Definizioni degli oggetti..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "KiB/s" + +#: src/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "MiB/s" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "Definizioni dei cubi..." + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Procedere" -#: src/guiFormSpecMenu.cpp:2846 -msgid "Enter " -msgstr "" +#: src/game.cpp +msgid "Resolving address..." +msgstr "Risoluzione dell'indirizzo..." -#: src/guiKeyChangeMenu.cpp:125 +#: src/game.cpp +msgid "Respawn" +msgstr "Riapparire" + +#: src/game.cpp +#, fuzzy +msgid "Shutting down..." +msgstr "Spegnimento della roba..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Volume del suono" + +#: src/game.cpp +msgid "You died." +msgstr "Siete morti." + +#: src/guiFormSpecMenu.cpp +#, fuzzy +msgid "Enter " +msgstr "Invio " + +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "ok" + +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Usare\" = scendere" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Indietro" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Chat" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Comando" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Console" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Volare On/Off = due volte \"saltare\"" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Scartare" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Avanti" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventario" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Saltare" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Tasto già in uso" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Collegamenti dei tasti. (Se questo menù si incasina, rimuovete la roba da " "minetest.conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Usare\" = scendere" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Volare On/Off = due volte \"saltare\"" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "Tasto già in uso" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "premere il tasto" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "Avanti" - -#: src/guiKeyChangeMenu.cpp:398 -msgid "Backward" -msgstr "Indietro" - -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Sinistra" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Destra" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Usare" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Saltare" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "Strisciare" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "Scartare" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "Inventario" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Chat" -msgstr "Chat" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Command" -msgstr "Comando" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Console" -msgstr "Console" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "Volare On/Off" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "Correre On/Off" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "Fantasma On/Off" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "Selez. ad area" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Stampa stack" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" -msgstr "Vecchia password" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Selez. ad area" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" -msgstr "Nuova password" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Destra" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" -msgstr "Confermare la password" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Strisciare" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Correre On/Off" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Correre On/Off" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Volare On/Off" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Fantasma On/Off" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Usare" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "premere il tasto" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Cambiare" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Confermare la password" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Nuova password" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Vecchia password" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Le password non coincidono!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "Volume suono:" - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Uscire" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Tasto sinistro" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Volume suono: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Tasto centrale" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Tasto destro" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "Pulsante X 1" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "Backspace" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "Canc" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "Invio" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "Pulsante X 2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Bloc Maiusc" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Menù" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Pausa" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Maiusc" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "Convert" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Esc" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Fine" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "Fine" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Inizio" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "Cambio di modalità" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Successivo" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Precedente" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Spazio" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Pag. giù" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Eseguire" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Stamp" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Selezionare" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Pag. su" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Aiuto" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Ins" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "Istantanea" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "Finestre a sinistra" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "Applicazioni" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Tast. num. 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Tast. num. 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "Finestre a destra" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Sospensione" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Tast. num. 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Tast. num. 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Tast. num. 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Tast. num. 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Tast. num. 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Tast. num. 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Tast. num. *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Tast. num. +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Tast. num. -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Tast. num. /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Tast. num. 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Tast. num. 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Bloc Num" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Bloc Scorr" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Maiusc sx" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Maiusc dx" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Ctrl sx" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Menù a sinistra" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Ctrl dx" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Menù a destra" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Virgola" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "Meno" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "Punto" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Più" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "Backspace" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Bloc Maiusc" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Canc" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Virgola" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convert" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "Pag. giù" + +#: src/keycode.cpp +msgid "End" +msgstr "Fine" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Esc" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "Eseguire" + +#: src/keycode.cpp +msgid "Final" +msgstr "Fine" + +#: src/keycode.cpp +msgid "Help" +msgstr "Aiuto" + +#: src/keycode.cpp +msgid "Home" +msgstr "Inizio" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Ins" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Tasto sinistro" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Ctrl sx" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Menù a sinistra" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Maiusc sx" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Finestre a sinistra" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menù" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Tasto centrale" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Meno" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Cambio di modalità" + +#: src/keycode.cpp +msgid "Next" +msgstr "Successivo" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Bloc Num" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Tast. num. *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Tast. num. +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Tast. num. -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Tast. num. /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Tast. num. 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Tast. num. 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Tast. num. 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Tast. num. 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Tast. num. 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Tast. num. 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Tast. num. 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Tast. num. 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Tast. num. 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Tast. num. 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pausa" + +#: src/keycode.cpp +msgid "Period" +msgstr "Punto" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Più" + +#: src/keycode.cpp +msgid "Print" +msgstr "Stamp" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Precedente" + +#: src/keycode.cpp +msgid "Return" +msgstr "Invio" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Tasto destro" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Ctrl dx" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Menù a destra" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Maiusc dx" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Finestre a destra" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Bloc Scorr" + +#: src/keycode.cpp +msgid "Select" +msgstr "Selezionare" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Maiusc" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Sospensione" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Istantanea" + +#: src/keycode.cpp +msgid "Space" +msgstr "Spazio" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Pag. su" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "Pulsante X 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "Pulsante X 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "Nuvole 3D" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Filtro anisotropico" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Indietro" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Filtro Bi-Lineare" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Risoluzione dell'indirizzo..." + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bumpmapping" +msgstr "Mip-Mapping" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Cambiare i tasti" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Cambiare i tasti" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Modalità creativa" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Modalità creativa" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "Nuvole 3D" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" msgstr "Menù principale" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "Colored fog" msgstr "" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Errore di connessione (scaduta?)" - -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "" -"Non è stato selezionato nessun mondo e non è stato fornito nessun indirizzo. " -"Niente da fare." - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Impossibile trovare o caricare il gioco \"" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Comando" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Specifica del gioco non valida." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Connettere" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Controlli predefiniti:\n" -#~ "- WASD: muoversi\n" -#~ "- Space: saltare/arrampicarsi\n" -#~ "- Shift: strisciare/scendere\n" -#~ "- Q: scartare l'oggetto\n" -#~ "- I: inventario\n" -#~ "- Mouse: girarsi/guardare\n" -#~ "- Tasto sinistro del mouse: scavare/colpire\n" -#~ "- Tasto destro del mouse: posizionare/usare\n" -#~ "- Rotella del mouse: scegliere l'oggetto\n" -#~ "- T: chat\n" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Connessione al server..." -#~ msgid "Exit to OS" -#~ msgstr "Tornare al S.O." +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" -#~ msgid "Exit to Menu" -#~ msgstr "Tornare al menù" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Console" -#~ msgid "Sound Volume" -#~ msgstr "Volume del suono" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Console" -#~ msgid "Change Password" -#~ msgstr "Cambiare la password" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Console" -#~ msgid "Continue" -#~ msgstr "Continuare" +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" -#~ msgid "You died." -#~ msgstr "Siete morti." +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" -#~ msgid "Shutting down stuff..." -#~ msgstr "Spegnimento della roba..." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Control" -#~ msgid "Connecting to server..." -#~ msgstr "Connessione al server..." +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" -#~ msgid "Resolving address..." -#~ msgstr "Risoluzione dell'indirizzo..." +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" -#~ msgid "Creating client..." -#~ msgstr "Creazione del client..." +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" -#~ msgid "Creating server...." -#~ msgstr "Creazione del server..." +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" -#~ msgid "Loading..." -#~ msgstr "Caricamento..." +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" -#~ msgid "Local install" -#~ msgstr "Installazione locale" +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" -#~ msgid "Add mod:" -#~ msgstr "Aggiungere un modulo:" +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" -#~ msgid "MODS" -#~ msgstr "MODULI" +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" -#~ msgid "TEXTURE PACKS" -#~ msgstr "PACCH. DI IMM." +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" -#~ msgid "SINGLE PLAYER" -#~ msgstr "GIOC. SING." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Abilitare il danno" -#~ msgid "Finite Liquid" -#~ msgstr "Liquido limitato" +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" -#~ msgid "Preload item visuals" -#~ msgstr "Precaricare le immagini" +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" -#~ msgid "SETTINGS" -#~ msgstr "IMPOSTAZIONI" +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" -#~ msgid "Password" -#~ msgstr "Password" +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" -#~ msgid "Name" -#~ msgstr "Nome" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default game" +msgstr "modificare il gioco" -#~ msgid "START SERVER" -#~ msgstr "AVVIO SERVER" +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" -#~ msgid "Favorites:" -#~ msgstr "Preferiti:" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Nuova password" -#~ msgid "CLIENT" -#~ msgstr "CLIENT" +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Aggiungere il modulo" +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" -#~ msgid "Remove selected mod" -#~ msgstr "Rimuovere il modulo selezionato" +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" -#~ msgid "EDIT GAME" -#~ msgstr "MODIFICARE IL GIOCO" +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" -#~ msgid "new game" -#~ msgstr "nuovo gioco" +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" -#~ msgid "edit game" -#~ msgstr "modificare il gioco" +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" -#~ msgid "Mods:" -#~ msgstr "Moduli:" +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" -#~ msgid "Games" -#~ msgstr "Giochi" +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" -#~ msgid "GAMES" -#~ msgstr "GIOCHI" +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Abilitare le particelle" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "Volare On/Off = due volte \"saltare\"" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "Volare On/Off = due volte \"saltare\"" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "Archivio in linea" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Abilitare il danno" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "needs_fallback_font" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Nessun Filtro" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Avanti" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Disatt. pacch." + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "attivata" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Gioco" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Inventario" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Saltare" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Menù a sinistra" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Menù principale" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Menù principale" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Generat. mappe" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Generat. mappe" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Generat. mappe" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Generat. mappe" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Generat. mappe" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Generat. mappe" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Menù" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Mip-Mapping" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Node highlighting" +msgstr "Evidenziamento Nodi" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion Scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Player name" +msgstr "Nome del giocatore troppo lungo." + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Caricamento..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Selez. ad area" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Menù a destra" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Istantanea" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Giocatore singolo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Porta del server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "Porta del server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Porta del server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Elenco dei server pubblici" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Elenco dei server pubblici" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Shader" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Illuminazione armoniosa" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Strisciare" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Pacch. immagini" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Filtro Tri-Lineare" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "premere il tasto" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Sviluppatori principali" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Volume del suono" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving Nodes" +msgstr "Inizializzazione nodi" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Alberi migliori" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#, fuzzy +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Riavviare minetest per rendere effettive le modifiche" + +#~ msgid "Game Name" +#~ msgstr "Nome del gioco" #~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" #~ msgstr "Gestore del gioco: impossibile il modulo \"$1\" nel gioco \"$2\"" -#~ msgid "Game Name" -#~ msgstr "Nome del gioco" +#~ msgid "GAMES" +#~ msgstr "GIOCHI" + +#~ msgid "Mods:" +#~ msgstr "Moduli:" + +#~ msgid "new game" +#~ msgstr "nuovo gioco" + +#~ msgid "EDIT GAME" +#~ msgstr "MODIFICARE IL GIOCO" + +#~ msgid "Remove selected mod" +#~ msgstr "Rimuovere il modulo selezionato" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Aggiungere il modulo" + +#~ msgid "CLIENT" +#~ msgstr "CLIENT" + +#~ msgid "Favorites:" +#~ msgstr "Preferiti:" + +#~ msgid "START SERVER" +#~ msgstr "AVVIO SERVER" + +#~ msgid "Name" +#~ msgstr "Nome" + +#~ msgid "Password" +#~ msgstr "Password" + +#~ msgid "SETTINGS" +#~ msgstr "IMPOSTAZIONI" + +#~ msgid "Preload item visuals" +#~ msgstr "Precaricare le immagini" + +#~ msgid "Finite Liquid" +#~ msgstr "Liquido limitato" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "GIOC. SING." + +#~ msgid "TEXTURE PACKS" +#~ msgstr "PACCH. DI IMM." + +#~ msgid "MODS" +#~ msgstr "MODULI" + +#~ msgid "Add mod:" +#~ msgstr "Aggiungere un modulo:" + +#~ msgid "Local install" +#~ msgstr "Installazione locale" + +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "E' necessario usare i driver OpenGL per abilitare gli shader." + +#~ msgid "Simple Leaves" +#~ msgstr "Foglie semplici" + +#, fuzzy +#~ msgid "Reset singleplayer world" +#~ msgstr "Giocatore singolo" + +#~ msgid "Opaque Water" +#~ msgstr "Acqua opaca" + +#~ msgid "Opaque Leaves" +#~ msgstr "Foglie opache" + +#~ msgid "No!!!" +#~ msgstr "No!!!" diff --git a/po/ja/minetest.po b/po/ja/minetest.po index b93c672f..2e1024d5 100644 --- a/po/ja/minetest.po +++ b/po/ja/minetest.po @@ -2,599 +2,656 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-23 02:38+0900\n" -"PO-Revision-Date: 2015-02-22 10:57+0900\n" -"Last-Translator: Rui\n" -"Language-Team: Minetest JP\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-10-05 08:20+0200\n" +"Last-Translator: Rui \n" +"Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 2.5-dev\n" -#: builtin/fstk/ui.lua:67 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "以下のModのLuaスクリプト内でエラーが発生しました:" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "エラーが発生しました:" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "メインメニュー" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "決定" -#: builtin/mainmenu/dlg_config_world.lua:29 -msgid "World:" -msgstr "ワールド:" +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "再接続" -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 -msgid "Hide Game" -msgstr "ゲームを隠す" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "サーバが再接続を要求しました:" -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 -msgid "Hide mp content" -msgstr "Modパックの簡略化" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "読み込み中..." -#: builtin/mainmenu/dlg_config_world.lua:49 -msgid "Mod:" -msgstr "Mod名:" +#: builtin/mainmenu/common.lua +#, fuzzy +msgid "Protocol version mismatch. " +msgstr "プロトコルバージョンの不一致、サーバー " -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 -msgid "Depends:" -msgstr "依存Mod:" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:192 -msgid "Save" -msgstr "保存" +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:200 -#: src/keycode.cpp:224 +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "インターネット接続を確認し、公開サーバーリストを再有効化してください。" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "キャンセル" -#: builtin/mainmenu/dlg_config_world.lua:71 -msgid "Enable MP" -msgstr "有効化" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "依存Mod:" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "無効化" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 -msgid "enabled" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" msgstr "有効化" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "すべて有効化" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "ワールド名" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" +"許可されていない文字が使用されているためMod \"$1\"を有効化できませんでした。" +"文字は[a-z0-9_]のみ使用できます。" -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Seed値" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "ゲームを非表示" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "ワールドタイプ" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Modパックを非表示" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "ゲーム" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod名:" -#: builtin/mainmenu/dlg_create_world.lua:63 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "保存" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "ワールド:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "有効化" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "ワールド名\"$1\"はすでに使用されています" + +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "作成" -#: builtin/mainmenu/dlg_create_world.lua:68 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "minetest.netからminetest_gameのゲームをダウンロードしてください" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "minetest.netから再ダウンロードしてください" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "ゲーム" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "ワールドタイプ" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No worldname given or no game selected" +msgstr "ワールド名が入力されていないか、ゲームが選択されていません" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Seed値" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "警告: Minimal development testは開発者のためのゲームです。" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "ワールド名" + +#: builtin/mainmenu/dlg_create_world.lua msgid "You have no subgames installed." msgstr "ゲームがインストールされていません。" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "minetest.netから再ダウンロードしてください。" - -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "警告:Minimal development testは開発者のためのゲームです。" - -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "minetest.netからminetest_gameのゲームをダウンロードしてください。" - -#: builtin/mainmenu/dlg_create_world.lua:99 -msgid "A world named \"$1\" already exists" -msgstr "ワールド名\"$1\"はすでに使用されています。" - -#: builtin/mainmenu/dlg_create_world.lua:116 -msgid "No worldname given or no game selected" -msgstr "ワールド名が入力されていないか、ゲームが選択されていません。" - -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "本当に\"$1\"を削除してよろしいですか?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:79 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Modmgr: failed to delete \"$1\"" +msgstr "Modマネージャ: \"$1\"の削除に失敗しました" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Modmgr: invalid modpath \"$1\"" +msgstr "Modマネージャ: Mod\"$1\"の場所が不明です" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "いいえ!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua msgid "Yes" msgstr "はい" -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "いいえ" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 -msgid "Modmgr: failed to delete \"$1\"" -msgstr "Modマネージャ:\"$1\"の削除に失敗しました。" - -#: builtin/mainmenu/dlg_delete_mod.lua:45 -msgid "Modmgr: invalid modpath \"$1\"" -msgstr "Modマネージャ:Mod\"$1\"の場所が不明です。" - -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" -msgstr "ワールド\"$1\"を削除してよろしいですか?" +msgstr "ワールド\"$1\"を削除しますか?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "いいえ" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "名前を変更" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "決定" -#: builtin/mainmenu/modmgr.lua:344 -msgid "Install Mod: file: \"$1\"" -msgstr "Modインストール:ファイル\"$1\"からModをインストールします。" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "名前を変更:" -#: builtin/mainmenu/modmgr.lua:345 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" "\n" -"Modインストール:ファイル\"$1\"は非対応の形式か、壊れています。" +"Modインストール: ファイル\"$1\"は非対応の形式か、壊れています" -#: builtin/mainmenu/modmgr.lua:365 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" -msgstr "$2へ$1をインストールできませんでした。" +msgstr "$2へ$1をインストールできませんでした" -#: builtin/mainmenu/modmgr.lua:368 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Modインストール: ファイル: \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Modインストール: $1の本来のMod名が不明です" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -"Modインストール:Modパック$1に適したフォルダ名を見つけることができませんでし" -"た。" +"Modインストール: Modパック$1に適したフォルダ名を見つけることができませんでし" +"た" -#: builtin/mainmenu/modmgr.lua:388 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Modインストール:$1の本来のMod名が不明です。" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "未分類" - -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 -msgid "Search" -msgstr "検索" - -#: builtin/mainmenu/store.lua:126 -msgid "Downloading $1, please wait..." -msgstr "$1をダウンロードしています。しばらくお待ちください..." - -#: builtin/mainmenu/store.lua:160 -msgid "Successfully installed:" -msgstr "インストールが完了しました。:" - -#: builtin/mainmenu/store.lua:162 -msgid "Shortname:" -msgstr "省略名" - -#: builtin/mainmenu/store.lua:472 -msgid "Rating" -msgstr "評価" - -#: builtin/mainmenu/store.lua:497 -msgid "re-Install" -msgstr "再インストール" - -#: builtin/mainmenu/store.lua:499 -msgid "Install" -msgstr "インストール" - -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "閉じる" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "$1をダウンロードしています。しばらくお待ちください..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "インストール" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" -msgstr "ページ $1/$2" +msgstr "ページ $1 / $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "クレジット" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "評価" -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "開発者" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "検索" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "省略名:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "インストールが完了しました:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "未分類" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "再インストール" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "開発協力者" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "開発者" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "クレジット" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "以前の開発協力者" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "以前の開発者" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "インストール済みのMod:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "オンラインでModを検索" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Modの説明がありません。" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Modの情報:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "名前を変更" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "選択したModパックを削除" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "選択したModを削除" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Modファイルを選択" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "Mod" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Modの説明がありません" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "名前を変更" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Modファイルを選択:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "選択したModを削除" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "選択したModパックを削除" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "アドレスとポート:" -#: builtin/mainmenu/tab_multiplayer.lua:24 -msgid "Name / Password :" -msgstr "名前とパスワード:" +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp +msgid "Client" +msgstr "クライアント" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "公開済みのサーバーの一覧" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "削除" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "接続" -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Creative mode" -msgstr "クリエイティブモード" +msgstr "クリエイティブモード" -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Damage enabled" -msgstr "HPあり" +msgstr "ダメージ有効" -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "削除" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "名前とパスワード:" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "公開サーバーリスト" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "PvP enabled" -msgstr "PvPあり" +msgstr "PvP有効" -#: builtin/mainmenu/tab_multiplayer.lua:257 -msgid "Client" -msgstr "クライアント" - -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "作成" - -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -msgid "Configure" -msgstr "設定" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "ゲームスタート" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "ワールドを選択:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" -msgstr "クリエイティブモード" - -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" -msgstr "ダメージあり" - -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "サーバーを公開する" - -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "名前とパスワード" - -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "バインドアドレス" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "設定" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "クリエイティブモード" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "ダメージ有効" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "名前とパスワード" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "作成" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "ワールドが作成または選択されていません!" + +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "ポート" -#: builtin/mainmenu/tab_server.lua:51 +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "公開サーバー" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "ワールドを選択:" + +#: builtin/mainmenu/tab_server.lua +msgid "Server" +msgstr "サーバー" + +#: builtin/mainmenu/tab_server.lua msgid "Server Port" msgstr "サーバーのポート" -#: builtin/mainmenu/tab_server.lua:218 -msgid "Server" -msgstr "サーバー" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "ゲームスタート" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "No Filter" -msgstr "フィルタ無し" +#: builtin/mainmenu/tab_settings.lua +msgid "\"" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Bilinear Filter" -msgstr "バイリニアフィルタ" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Trilinear Filter" -msgstr "トリリニアフィルタ" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Mipmap" -msgstr "ミップマップ無し" - -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Mipmap" -msgstr "ミップマップ" - -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Mipmap + Aniso. Filter" -msgstr "異方性フィルタ" - -#: builtin/mainmenu/tab_settings.lua:77 -msgid "Are you sure to reset your singleplayer world?" -msgstr "シングルプレイヤーのワールドをリセットしてよろしいですか?" - -#: builtin/mainmenu/tab_settings.lua:81 -msgid "No!!!" -msgstr "いいえ" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Smooth Lighting" -msgstr "滑らかな光" - -#: builtin/mainmenu/tab_settings.lua:183 -msgid "Enable Particles" -msgstr "パーティクル有効化" - -#: builtin/mainmenu/tab_settings.lua:185 -msgid "3D Clouds" -msgstr "立体の雲" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Fancy Trees" -msgstr "綺麗な木" - -#: builtin/mainmenu/tab_settings.lua:189 -msgid "Opaque Water" -msgstr "不透明な水" - -#: builtin/mainmenu/tab_settings.lua:191 -msgid "Connected Glass" -msgstr "ガラスをつなげる" - -#: builtin/mainmenu/tab_settings.lua:193 -msgid "Node Highlighting" -msgstr "ノードの強調" - -#: builtin/mainmenu/tab_settings.lua:196 -msgid "Texturing:" -msgstr "テクスチャリング:" - -#: builtin/mainmenu/tab_settings.lua:201 -msgid "Rendering:" -msgstr "レンダリング:" - -#: builtin/mainmenu/tab_settings.lua:205 -msgid "Restart minetest for driver change to take effect" -msgstr "ドライバーを変更するためMinetesを再起動します" - -#: builtin/mainmenu/tab_settings.lua:207 -msgid "Shaders" -msgstr "シェーダー" - -#: builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "操作変更" -#: builtin/mainmenu/tab_settings.lua:215 -msgid "Reset singleplayer world" -msgstr "シングルプレイヤーのワールドをリセット" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Disabled" +msgstr "無効化" -#: builtin/mainmenu/tab_settings.lua:219 -msgid "GUI scale factor" -msgstr "メニューの大きさ" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:223 -msgid "Scaling factor applied to menu elements: " -msgstr "メニューの大きさとして設定する数値:" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Enabled" +msgstr "有効化" -#: builtin/mainmenu/tab_settings.lua:229 -msgid "Touch free target" -msgstr "タッチ位置を自由にする" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:235 -msgid "Touchthreshold (px)" -msgstr "タッチのしきい値(ピクセル単位)" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Games" +msgstr "ゲーム" -#: builtin/mainmenu/tab_settings.lua:242 builtin/mainmenu/tab_settings.lua:256 -msgid "Bumpmapping" -msgstr "バンプマッピング" +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:244 builtin/mainmenu/tab_settings.lua:257 -msgid "Generate Normalmaps" -msgstr "ノーマルマップの生成" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:246 builtin/mainmenu/tab_settings.lua:258 -msgid "Parallax Occlusion" -msgstr "視差遮蔽マッピング" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:248 builtin/mainmenu/tab_settings.lua:259 -msgid "Waving Water" -msgstr "揺れる水" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:250 builtin/mainmenu/tab_settings.lua:260 -msgid "Waving Leaves" -msgstr "揺れる葉" +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:252 builtin/mainmenu/tab_settings.lua:261 -msgid "Waving Plants" -msgstr "揺れる草花" +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:287 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "シェーダーを有効にするにはOpenGLを使用する必要があります。" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "選択キー" -#: builtin/mainmenu/tab_settings.lua:398 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "設定" -#: builtin/mainmenu/tab_simple_main.lua:80 -msgid "Fly mode" -msgstr "飛行モード" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:84 -msgid "Start Singleplayer" -msgstr "ゲームスタート" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:85 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Mod設定" -#: builtin/mainmenu/tab_simple_main.lua:208 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "メイン" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "シングルプレイ開始" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" -msgstr "ゲームスタート" +msgstr "プレイ" -#: builtin/mainmenu/tab_singleplayer.lua:268 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" -msgstr "シングルプレイヤー" +msgstr "シングルプレイヤー" -#: builtin/mainmenu/tab_texturepacks.lua:49 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "No information available" +msgstr "情報がありません" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "無し" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Select texture pack:" msgstr "テクスチャパックを選択:" -#: builtin/mainmenu/tab_texturepacks.lua:69 -msgid "No information available" -msgstr "情報がありません。" - -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" -msgstr "テクスチャパック" +msgstr "テクスチャ" -#: src/client.cpp:1616 -msgid "Loading textures..." -msgstr "テクスチャ読み込み中..." +#: src/client.cpp +msgid "Connection timed out." +msgstr "接続がタイムアウトしました。" -#: src/client.cpp:1626 -msgid "Rebuilding shaders..." -msgstr "シェーダー構築中..." - -#: src/client.cpp:1633 -msgid "Initializing nodes..." -msgstr "ノードの設定中..." - -#: src/client.cpp:1647 -msgid "Initializing nodes" -msgstr "ノードを設定中" - -#: src/client.cpp:1655 -msgid "Item textures..." -msgstr "アイテムのテクスチャを設定中..." - -#: src/client.cpp:1680 +#: src/client.cpp msgid "Done!" msgstr "完了!" -#: src/client/clientlauncher.cpp:172 -msgid "Main Menu" -msgstr "メインメニュー" +#: src/client.cpp +msgid "Initializing nodes" +msgstr "ノードを設定中" -#: src/client/clientlauncher.cpp:210 -msgid "Player name too long." -msgstr "名前が長過ぎます。" +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "ノードの設定中..." -#: src/client/clientlauncher.cpp:248 +#: src/client.cpp +msgid "Item textures..." +msgstr "テクスチャを設定中..." + +#: src/client.cpp +msgid "Loading textures..." +msgstr "テクスチャ読み込み中..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "シェーダー構築中..." + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "接続失敗(またはタイムアウト)" -#: src/client/clientlauncher.cpp:413 -msgid "No world selected and no address provided. Nothing to do." -msgstr "ワールドが選択されていないアドレスです。続行できません。" - -#: src/client/clientlauncher.cpp:420 -msgid "Provided world path doesn't exist: " -msgstr "ワールドが存在しません:" - -#: src/client/clientlauncher.cpp:429 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" -msgstr "ゲーム\"の読み込みができません。" +msgstr "ゲーム\"の読み込みができません" -#: src/client/clientlauncher.cpp:447 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "無効なgamespecです。" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "メインメニュー" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "ワールドが選択されていないアドレスです。続行できません。" + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "名前が長過ぎます。" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "ワールドが存在しません: " + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "yes" -#: src/game.cpp:1046 src/guiFormSpecMenu.cpp:2008 -msgid "Proceed" -msgstr "決定" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"詳細はdebug.txtをご覧ください。" -#: src/game.cpp:1066 -msgid "You died." -msgstr "You died." +#: src/game.cpp +msgid "Change Keys" +msgstr "操作変更" -#: src/game.cpp:1067 -msgid "Respawn" -msgstr "Respawn" +#: src/game.cpp +msgid "Change Password" +msgstr "パスワード変更" -#: src/game.cpp:1086 +#: src/game.cpp +msgid "Connecting to server..." +msgstr "サーバー接続中..." + +#: src/game.cpp +msgid "Continue" +msgstr "再開" + +#: src/game.cpp +msgid "Creating client..." +msgstr "クライアント起動中..." + +#: src/game.cpp +msgid "Creating server..." +msgstr "サーバー起動中..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"基本操作:\n" +"- WASD: 移動\n" +"- スペース: ジャンプ、登る\n" +"- Shift: スニーク、降りる\n" +"- Q: アイテムを落とす\n" +"- I: インベントリ\n" +"- マウス: 見回す\n" +"- 左クリック: 破壊、パンチ\n" +"- 右クリック: 設置、使用\n" +"- ホイール: アイテム選択\n" +"- T: チャット画面\n" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -610,532 +667,2926 @@ msgid "" " --> place single item to slot\n" msgstr "" "基本操作:\n" -"タッチによる操作\n" -"- シングルタップ:ブロックの破壊\n" -"- ダブルタップ:設置やアイテムの使用\n" -"- 指でスライド:見回す\n" -"メニュー(インベントリ)の操作\n" -"- ダブルタップ:\n" -"-- 閉じる\n" -"- アイテムスロットをタッチ:\n" -"-- アイテムの移動\n" -"- タッチしてドラッグ:\n" -"-- アイテムを置く\n" +"タッチ操作:\n" +"- シングルタップ: ブロックの破壊\n" +"- ダブルタップ: 設置、使用\n" +"- スライド: 見回す\n" +"メニュー、インベントリの操作:\n" +"- メニューの外をダブルタップ:\n" +" --> 閉じる\n" +"- アイテムをタッチ:\n" +" --> アイテムの移動\n" +"- タッチしてドラッグ、二本指タップ:\n" +" --> アイテムを一つスロットに置く\n" -#: src/game.cpp:1100 -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" -"基本操作:\n" -"- WASD:移動\n" -"- スペース:ジャンプ、登る\n" -"- Shift:スニーク、降りる\n" -"- Q:アイテムを落とす\n" -"- I:インベントリ\n" -"- マウス移動:見回す\n" -"- 左クリック:ブロック破壊\n" -"- 右クリック:設置や使用\n" -"- ホイール:アイテム選択\n" -"- T:チャット画面\n" - -#: src/game.cpp:1119 -msgid "Continue" -msgstr "再開" - -#: src/game.cpp:1123 -msgid "Change Password" -msgstr "パスワード変更" - -#: src/game.cpp:1128 -msgid "Sound Volume" -msgstr "音量" - -#: src/game.cpp:1130 -msgid "Change Keys" -msgstr "操作変更" - -#: src/game.cpp:1133 +#: src/game.cpp msgid "Exit to Menu" msgstr "タイトル" -#: src/game.cpp:1135 +#: src/game.cpp msgid "Exit to OS" msgstr "終了" -#: src/game.cpp:1812 -msgid "Shutting down..." -msgstr "終了中..." - -#: src/game.cpp:1862 -msgid "Loading..." -msgstr "読み込み中..." - -#: src/game.cpp:1919 -msgid "Creating server..." -msgstr "サーバー作成中..." - -#: src/game.cpp:1956 -msgid "Creating client..." -msgstr "クライアント作成中..." - -#: src/game.cpp:2129 -msgid "Resolving address..." -msgstr "アドレス解決中..." - -#: src/game.cpp:2220 -msgid "Connecting to server..." -msgstr "サーバー接続中..." - -#: src/game.cpp:2278 +#: src/game.cpp msgid "Item definitions..." msgstr "アイテム定義中..." -#: src/game.cpp:2283 +#: src/game.cpp +msgid "KiB/s" +msgstr "KB/秒" + +#: src/game.cpp +msgid "Media..." +msgstr "通信中..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "MB/秒" + +#: src/game.cpp msgid "Node definitions..." msgstr "ノード定義中..." -#: src/game.cpp:2290 -msgid "Media..." -msgstr "..." +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "決定" -#: src/game.cpp:2295 -msgid " KB/s" -msgstr " KB/秒" +#: src/game.cpp +msgid "Resolving address..." +msgstr "アドレス解決中..." -#: src/game.cpp:2299 -msgid " MB/s" -msgstr " MB/秒" +#: src/game.cpp +msgid "Respawn" +msgstr "リスポーン" -#: src/game.cpp:4255 -msgid "" -"\n" -"Check debug.txt for details." -msgstr "" -"\n" -"詳細はdebug.txtをご覧ください。" +#: src/game.cpp +msgid "Shutting down..." +msgstr "終了中..." -#: src/guiFormSpecMenu.cpp:2799 +#: src/game.cpp +msgid "Sound Volume" +msgstr "音量" + +#: src/game.cpp +msgid "You died." +msgstr "死にました。" + +#: src/guiFormSpecMenu.cpp msgid "Enter " -msgstr "Enter" +msgstr "エンター " -#: src/guiFormSpecMenu.cpp:2819 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "決定" -#: src/guiKeyChangeMenu.cpp:126 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "操作の設定を変更します。" - -#: src/guiKeyChangeMenu.cpp:166 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" -msgstr "「使用」で降りる" +msgstr "「使用」キーで降りる" -#: src/guiKeyChangeMenu.cpp:181 -msgid "Double tap \"jump\" to toggle fly" -msgstr "「ジャンプ」二回押しで飛行モード" - -#: src/guiKeyChangeMenu.cpp:297 -msgid "Key already in use" -msgstr "すでに使われているキーです。" - -#: src/guiKeyChangeMenu.cpp:372 -msgid "press key" -msgstr "キー入力待ち" - -#: src/guiKeyChangeMenu.cpp:398 -msgid "Forward" -msgstr "前進" - -#: src/guiKeyChangeMenu.cpp:399 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "後退" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Left" -msgstr "左に進む" - -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:229 -msgid "Right" -msgstr "右に進む" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Use" -msgstr "使用" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Jump" -msgstr "ジャンプ" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Sneak" -msgstr "スニーク" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Drop" -msgstr "落とす" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Inventory" -msgstr "インベントリ" - -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "チャット" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "コマンド" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "コンソール" -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fly" -msgstr "飛行モード" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "「ジャンプ」キー二回押しで飛行モード" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle fast" -msgstr "高速移動モード" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "落とす" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Toggle Cinematic" -msgstr "シネマティックモード" +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "前進" -#: src/guiKeyChangeMenu.cpp:413 -msgid "Toggle noclip" -msgstr "すり抜けモード" +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "インベントリ" -#: src/guiKeyChangeMenu.cpp:414 -msgid "Range select" -msgstr "視野範囲変更" +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "ジャンプ" -#: src/guiKeyChangeMenu.cpp:415 +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "キーが重複しています" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" +"操作設定です。(変更に失敗した場合、minetest.confから該当する設定を削除してく" +"ださい)" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "左" + +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "スタックの表示" -#: src/guiPasswordChange.cpp:108 -msgid "Old Password" -msgstr "古いパスワード" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "視野範囲変更" -#: src/guiPasswordChange.cpp:124 -msgid "New Password" -msgstr "新しいパスワード" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "右" -#: src/guiPasswordChange.cpp:139 -msgid "Confirm Password" -msgstr "パスワードの確認" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "スニーク" -#: src/guiPasswordChange.cpp:155 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "映画風カメラ" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "高速移動モード" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "飛行モード" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "すり抜けモード" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "使用" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "キー入力待ち" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "変更" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "パスワードの確認" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "新しいパスワード" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "古いパスワード" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "パスワードが一致しません!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "音量:" - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "閉じる" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "左ボタン" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "音量: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "中ボタン" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "右ボタン" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "Xボタン1" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "Back" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "消す" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "エンター" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "タブ" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "Xボタン2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Caps Lock" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "コントロール" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "かな" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "メニュー" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "ポーズ" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "変換" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Esc" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Finalキー" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junjaキー" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "半角/全角" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "無変換" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "終了" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "モード変更" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Page Down" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Page Up" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "スペース" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "下" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "実行キー" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "印刷キー" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "選択キー" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "上" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "ヘルプ" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "Snapshot" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "左Windows" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" -msgstr "Apps" +msgstr "アプリ" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "右Windows" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "スリープ" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Numpad *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "左Shift" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "右Shift" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "左Ctrl" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "左メニュー" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "右Ctrl" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "右メニュー" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "読点" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "ー" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "." - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "プラス" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr ":" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "戻るキー" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Caps Lock" + +#: src/keycode.cpp +msgid "Clear" +msgstr "消す" + +#: src/keycode.cpp +msgid "Comma" +msgstr "読点" + +#: src/keycode.cpp +msgid "Control" +msgstr "コントロール" + +#: src/keycode.cpp +msgid "Convert" +msgstr "変換" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "下" + +#: src/keycode.cpp +msgid "End" +msgstr "終了" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Esc" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 -msgid "OEM Clear" -msgstr "OEM Clear" +#: src/keycode.cpp +msgid "Execute" +msgstr "実行キー" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Final" +msgstr "Finalキー" + +#: src/keycode.cpp +msgid "Help" +msgstr "ヘルプ" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junjaキー" + +#: src/keycode.cpp +msgid "Kana" +msgstr "かな" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "半角/全角" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "左ボタン" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "左Ctrl" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "左メニュー" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "左Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "左Windows" + +#: src/keycode.cpp +msgid "Menu" +msgstr "メニュー" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "中ボタン" + +#: src/keycode.cpp +msgid "Minus" +msgstr "-" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "モード変更" + +#: src/keycode.cpp +msgid "Next" +msgstr "Page Down" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "無変換" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "テンキー *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "テンキー +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "テンキー -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "テンキー /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "テンキー 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "テンキー 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "テンキー 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "テンキー 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "テンキー 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "テンキー 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "テンキー 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "テンキー 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "テンキー 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "テンキー 9" + +#: src/keycode.cpp +msgid "OEM Clear" +msgstr "OEMクリア" + +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "ポーズ" + +#: src/keycode.cpp +msgid "Period" +msgstr "." + +#: src/keycode.cpp +msgid "Plus" +msgstr "プラス" + +#: src/keycode.cpp +msgid "Print" +msgstr "印刷キー" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Page Up" + +#: src/keycode.cpp +msgid "Return" +msgstr "エンター" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "右ボタン" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "右Ctrl" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "右メニュー" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "右Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "右Windows" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "選択キー" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "スリープ" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Snapshot" + +#: src/keycode.cpp +msgid "Space" +msgstr "スペース" + +#: src/keycode.cpp +msgid "Tab" +msgstr "タブ" + +#: src/keycode.cpp +msgid "Up" +msgstr "上" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "Xボタン1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "Xボタン2" + +#: src/keycode.cpp msgid "Zoom" msgstr "ズーム" + +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "3Dの雲" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D mode" +msgstr "飛行モード" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "後退" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "バイリニアフィルタ" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "バインドアドレス" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "バンプマッピング" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "操作変更" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "操作変更" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "クリエイティブモード" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "クリエイティブモード" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "3Dの雲" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" +msgstr "メインメニュー" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "コマンド" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "ガラスを繋げる" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "サーバー接続中..." + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "コンソール" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "コンソール" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "コンソール" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "コントロール" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "ダメージ有効" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "新しいパスワード" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "パーティクル有効化" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "「ジャンプ」キー二回押しで飛行モード" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "「ジャンプ」キー二回押しで飛行モード" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "オンラインでModを検索" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "ダメージ有効" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "yes" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "フィルタ無し" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fly key" +msgstr "飛行モード" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "前進" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "GUI scaling filter" +msgstr "メニューの大きさ" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Generate normalmaps" +msgstr "ノーマルマップの生成" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "無効化" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "有効化" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "ゲーム" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "インベントリ" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "ジャンプ" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "左メニュー" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "メインメニュー" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "メインメニュー" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "ワールドタイプ" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "ワールドタイプ" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "ワールドタイプ" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "ワールドタイプ" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "ワールドタイプ" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "ワールドタイプ" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "メニュー" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "バンプマッピング" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Node highlighting" +msgstr "ノードをハイライト" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "視差遮蔽マッピング" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion" +msgstr "視差遮蔽マッピング" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion Scale" +msgstr "視差遮蔽マッピング" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion bias" +msgstr "視差遮蔽マッピング" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion iterations" +msgstr "視差遮蔽マッピング" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion mode" +msgstr "視差遮蔽マッピング" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion strength" +msgstr "視差遮蔽マッピング" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Player name" +msgstr "名前が長過ぎます。" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "テクスチャ読み込み中..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "視野範囲変更" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "右メニュー" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Snapshot" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "シングルプレイ開始" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "サーバー" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "サーバーのポート" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "サーバーのポート" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "サーバー" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "サーバーのポート" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "公開サーバーリスト" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "公開サーバーリスト" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "シェーダー" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "滑らかな光" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "スニーク" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of generated normalmaps." +msgstr "ノーマルマップの生成" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "テクスチャ" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "トリリニアフィルタ" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "キー入力待ち" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "以前の開発者" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "音量" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Walking speed" +msgstr "揺れる葉" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving Nodes" +msgstr "揺れる葉" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "揺れる葉" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving plants" +msgstr "揺れる草花" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water" +msgstr "揺れる水" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water height" +msgstr "揺れる水" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water length" +msgstr "揺れる水" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water speed" +msgstr "揺れる水" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Rendering:" +#~ msgstr "レンダリング:" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "ドライバーを変更するためMinetestを再起動します" + +#~ msgid " MB/s" +#~ msgstr " MB/秒" + +#~ msgid " KB/s" +#~ msgstr " KB/秒" + +#~ msgid "Touchthreshold (px)" +#~ msgstr "タッチのしきい値(ピクセル)" + +#~ msgid "Touch free target" +#~ msgstr "タッチ位置を自由にする" + +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "シェーダーを有効にするにはOpenGLを使用する必要があります。" + +#~ msgid "Texturing:" +#~ msgstr "テクスチャリング:" + +#~ msgid "Simple Leaves" +#~ msgstr "シンプルな葉" + +#~ msgid "Scaling factor applied to menu elements: " +#~ msgstr "メニューの大きさとして設定されている数値: " + +#~ msgid "Reset singleplayer world" +#~ msgstr "シングルプレイヤーのワールドをリセット" + +#~ msgid "Opaque Water" +#~ msgstr "不透明な水" + +#~ msgid "Opaque Leaves" +#~ msgstr "不透明な葉" + +#~ msgid "No!!!" +#~ msgstr "いいえ!!!" + +#~ msgid "No Mipmap" +#~ msgstr "ミップマップ無し" + +#~ msgid "Mipmap + Aniso. Filter" +#~ msgstr "異方性フィルタ" + +#~ msgid "Mipmap" +#~ msgstr "ミップマップ" + +#~ msgid "Fancy Leaves" +#~ msgstr "綺麗な葉" + +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr "シングルプレイヤーのワールドをリセットしてよろしいですか?" + +#~ msgid "Antialiasing:" +#~ msgstr "アンチエイリアス:" + +#~ msgid "8x" +#~ msgstr "8倍" + +#~ msgid "4x" +#~ msgstr "4倍" + +#~ msgid "2x" +#~ msgstr "2倍" diff --git a/po/jbo/minetest.po b/po/jbo/minetest.po new file mode 100644 index 00000000..9a7ffaa5 --- /dev/null +++ b/po/jbo/minetest.po @@ -0,0 +1,3478 @@ +# Language jbo translations for minetest package. +# Copyright (C) 2015 THE minetest'S COPYRIGHT HOLDER +# This file is distributed under the same license as the minetest package. +# Automatically generated, 2015. +# +msgid "" +msgstr "" +"Project-Id-Version: minetest\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-08-15 16:30+0200\n" +"Last-Translator: Wuzzy \n" +"Language-Team: Lojban \n" +"Language: jbo\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 2.4-dev\n" + +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "lo ralju" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua +msgid "Ok" +msgstr "je'e" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "samjongau" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr ".i ca'o samymo'i" + +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Cancel" +msgstr "fitytoltu'i" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +#, fuzzy +msgid "Depends:" +msgstr "nitcu" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable MP" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable all" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "rejgau" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "selpli" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr ".i lo munje me'e la'o gy.$1.gy. cu zasti" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "zbasu" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No worldname given or no game selected" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "le munje ke cunso namcu" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr ".i .e'unai la'o gy.Minimal Development Test.gy. cu tutci le finti" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "munje cmene" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Are you sure you want to delete \"$1\"?" +msgstr ".i xu do je'u djica lo nu vimcu la'o gy.$1.gy." + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Modmgr: failed to delete \"$1\"" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Modmgr: invalid modpath \"$1\"" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "nasai go'i" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "go'i" + +#: builtin/mainmenu/dlg_delete_world.lua +msgid "Delete World \"$1\"?" +msgstr ".i xu do djica lo nu vimcu lo munje be me'e zoi gy.$1.gy." + +#: builtin/mainmenu/dlg_delete_world.lua +msgid "No" +msgstr "na go'i" + +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp +msgid "Accept" +msgstr "fitytu'i" + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "" + +#: builtin/mainmenu/modmgr.lua +msgid "" +"\n" +"Install Mod: unsupported filetype \"$1\" or broken archive" +msgstr "" + +#: builtin/mainmenu/modmgr.lua +msgid "Failed to install $1 to $2" +msgstr "" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Close store" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "$1 moi le'i papri poi ke'a $1 mei" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "sisku" + +#: builtin/mainmenu/store.lua +#, fuzzy +msgid "Shortname:" +msgstr "tordu cmene" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "kalsa" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Active Contributors" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "lo finti liste" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Contributors" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Installed Mods:" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Mod information:" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua +msgid "Mods" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Address / Port :" +msgstr "lo samjudri jo'u judrnporte" + +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp +msgid "Client" +msgstr "lo samtciselse'u" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "samjongau" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "le nu finti kelci" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "vimcu" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "lo cmene .e lo lerpoijaspu" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Bind Address" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "le nu finti kelci" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "lo cmene .e lo lerpoijaspu" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "cnino" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr ".i lo no munje cu puzi zbasu gi'a cuxna" + +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "lo judrnporte" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "gubni" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +#, fuzzy +msgid "Select World:" +msgstr "cuxna lo munje" + +#: builtin/mainmenu/tab_server.lua +msgid "Server" +msgstr "lo samtcise'u" + +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "lo samtcise'u judrnporte" + +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "cfari fa lo nu kelci" + +#: builtin/mainmenu/tab_settings.lua +msgid "\"" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Disabled" +msgstr "selpli" + +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Enabled" +msgstr "selpli" + +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Games" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Select path" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Settings" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Config mods" +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Main" +msgstr "lo ralju" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Play" +msgstr "" + +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Singleplayer" +msgstr "pa kelci" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "No information available" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Texturepacks" +msgstr "" + +#: src/client.cpp +msgid "Connection timed out." +msgstr "" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr ".i ca'o samymo'i lo me la'o gy.node.gy." + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr ".i ca'o samymo'i lo me la'o gy.node.gy." + +#: src/client.cpp +msgid "Item textures..." +msgstr ".i ca'o samymo'i le dacti ke tengu datnyvei" + +#: src/client.cpp +msgid "Loading textures..." +msgstr ".i ca'o samymo'i le tengu datnyvei" + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp +msgid "needs_fallback_font" +msgstr "no" + +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" + +#: src/game.cpp +msgid "Change Keys" +msgstr "" + +#: src/game.cpp +msgid "Change Password" +msgstr "gafygau lo lerpoijaspu" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr ".i ca'o troci lo za'i samjo'e lo samse'u" + +#: src/game.cpp +msgid "Continue" +msgstr "ranji" + +#: src/game.cpp +msgid "Creating client..." +msgstr ".i lo samtciselse'u cu se zbasu" + +#: src/game.cpp +msgid "Creating server..." +msgstr ".i lo samtcise'u cu se zbasu" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "tolcfagau" + +#: src/game.cpp +#, fuzzy +msgid "Item definitions..." +msgstr ".i ca'o samymo'i tu'a le dacti" + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +#, fuzzy +msgid "Node definitions..." +msgstr ".i ca'o samymo'i tu'a lo me la'o gy.node.gy." + +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "" + +#: src/game.cpp +msgid "Resolving address..." +msgstr ".i ca'o troci lo nu facki lo samjudri" + +#: src/game.cpp +msgid "Respawn" +msgstr "gasnu lo nu mi tolcanci" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp +msgid "You died." +msgstr ".i do pu morsi" + +#: src/guiFormSpecMenu.cpp +msgid "Enter " +msgstr "" + +#: src/guiFormSpecMenu.cpp +#, fuzzy +msgid "ok" +msgstr "je'e" + +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "za'i ti'a muvdu" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "samta'a" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "minde" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "mu'e falcru" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "za'i ca'u muvdu" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "lo dacti uidje" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "mu'e plipe" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "za'i zu'e muvdu" + +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Print stacks" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "mu'e cuxna fi le'i se kuspe" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "za'i ri'u muvdu" + +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "za'i masno cadzu" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "mu'e co'a jonai mo'u sutra" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "mu'e co'a jonai mo'u vofli" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "mu'e pilno" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "ko da'ergau le batke" + +#: src/guiPasswordChange.cpp +msgid "Change" +msgstr "gafygau" + +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "le rapli lerpoijaspu" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "lo cnino lerpoijaspu" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "lo slabu lerpoijaspu" + +#: src/guiPasswordChange.cpp +msgid "Passwords do not match!" +msgstr ".i lo lerpoijaspu na mintu" + +#: src/guiVolumeChange.cpp +msgid "Exit" +msgstr "" + +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "lo ni sance " + +#: src/keycode.cpp +msgid "Apps" +msgstr "" + +#: src/keycode.cpp +msgid "Attn" +msgstr "la'o gy.Attn.gy." + +#: src/keycode.cpp +msgid "Back" +msgstr "" + +#: src/keycode.cpp +msgid "Capital" +msgstr "" + +#: src/keycode.cpp +msgid "Clear" +msgstr "" + +#: src/keycode.cpp +msgid "Comma" +msgstr "slaka bu" + +#: src/keycode.cpp +msgid "Control" +msgstr "" + +#: src/keycode.cpp +msgid "Convert" +msgstr "" + +#: src/keycode.cpp +msgid "CrSel" +msgstr "la'o gy.CrSel.gy." + +#: src/keycode.cpp +msgid "Down" +msgstr "" + +#: src/keycode.cpp +msgid "End" +msgstr "" + +#: src/keycode.cpp +msgid "Erase OEF" +msgstr "la'o gy.Erase OEF.gy." + +#: src/keycode.cpp +msgid "Escape" +msgstr "" + +#: src/keycode.cpp +msgid "ExSel" +msgstr "la'o gy.ExSel.gy." + +#: src/keycode.cpp +msgid "Execute" +msgstr "" + +#: src/keycode.cpp +msgid "Final" +msgstr "" + +#: src/keycode.cpp +msgid "Help" +msgstr "" + +#: src/keycode.cpp +msgid "Home" +msgstr "" + +#: src/keycode.cpp +msgid "Insert" +msgstr "" + +#: src/keycode.cpp +msgid "Junja" +msgstr "" + +#: src/keycode.cpp +msgid "Kana" +msgstr "" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "lo zulselpevysmacu" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "lo mijyselpevysmacu" + +#: src/keycode.cpp +msgid "Minus" +msgstr "vu'u bu" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "la'o gy.Mode Change.gy." + +#: src/keycode.cpp +msgid "Next" +msgstr "" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "" + +#: src/keycode.cpp +msgid "OEM Clear" +msgstr "la'o gy.OEM Clear.gy." + +#: src/keycode.cpp +msgid "PA1" +msgstr "la'o gy.PA1.gy." + +#: src/keycode.cpp +msgid "Pause" +msgstr "" + +#: src/keycode.cpp +msgid "Period" +msgstr "denpa bu" + +#: src/keycode.cpp +msgid "Plus" +msgstr "su'i bu" + +#: src/keycode.cpp +msgid "Print" +msgstr "" + +#: src/keycode.cpp +msgid "Prior" +msgstr "" + +#: src/keycode.cpp +msgid "Return" +msgstr "" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "lo prityselpevysmacu" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Select" +msgstr "" + +#: src/keycode.cpp +msgid "Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/keycode.cpp +msgid "Space" +msgstr "" + +#: src/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/keycode.cpp +msgid "Up" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "la'o gy.X Button 1.gy." + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "la'o gy.X Button 2.gy." + +#: src/keycode.cpp +msgid "Zoom" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "le bliku dilnu" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "za'i ti'a muvdu" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "lo puvyrelyli'iju'e" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr ".i ca'o troci lo nu facki lo samjudri" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "samta'a" + +#: src/settings_translation_file.cpp +msgid "Chat toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "le nu finti kelci" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "le nu finti kelci" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "le bliku dilnu" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" +msgstr "lo ralju" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "minde" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "lo jorne blaci" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr ".i ca'o troci lo za'i samjo'e lo samse'u" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Damage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "lo cnino lerpoijaspu" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "lo kantu" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double tap jump for fly" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double-tapping the jump key toggles fly mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables minimap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "no" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "za'i ca'u muvdu" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If disabled " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "selpli" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-Game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "lo dacti uidje" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "mu'e plipe" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "za'i zu'e muvdu" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "lo ralju" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "lo ralju" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Menus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "lo puvrmipmepi" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion Scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr ".i ca'o samymo'i le tengu datnyvei" + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "mu'e cuxna fi le'i se kuspe" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "za'i ri'u muvdu" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "pa kelci" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "lo samtcise'u" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "lo samtcise'u judrnporte" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "lo samtcise'u judrnporte" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "lo samtcise'u" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "lo samtcise'u judrnporte" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "lo samtcise'u" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "lo ti'orkemsamtci" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "lo xutla se gusni" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "za'i masno cadzu" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Texture path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "lo puvycibli'iju'e" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "ko da'ergau le batke" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "lo ni sance " + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving Nodes" +msgstr ".i ca'o samymo'i lo me la'o gy.node.gy." + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "lo melbi pezli" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Simple Leaves" +#~ msgstr "lo sampu pezli" + +#~ msgid "Reset singleplayer world" +#~ msgstr "kraga'igau le za'e pavykelci munje" + +#~ msgid "Opaque Water" +#~ msgstr "lo tolkli djacu" + +#~ msgid "Opaque Leaves" +#~ msgstr "lo tolkli pezli" + +#~ msgid "No!!!" +#~ msgstr "nasai go'i" + +#~ msgid "Mipmap + Aniso. Filter" +#~ msgstr "lo puvrmipmepi .e lo puvytolmanfyju'e" + +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr ".i xu do je'u djica lo nu kraga'igau le do za'e pavykelci munje" diff --git a/po/ko/minetest.po b/po/ko/minetest.po index 26117589..007141a8 100644 --- a/po/ko/minetest.po +++ b/po/ko/minetest.po @@ -3,974 +3,3406 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-07-08 23:30+0200\n" +"Last-Translator: Tae Lim Kook \n" +"Language-Team: Korean \n" +"Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" +msgstr "확인" + +#: builtin/fstk/ui.lua +msgid "Reconnect" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:26 -msgid "World:" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -msgid "Hide Game" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Cancel" +msgstr "취소" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua msgid "Depends:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 -msgid "Cancel" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:68 -msgid "Enable MP" -msgstr "" - -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "저장" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "" -#: builtin/mainmenu/modmgr.lua:366 -msgid "Install Mod: unable to find suitable foldername for modpack $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 -msgid "Search" -msgstr "" - -#: builtin/mainmenu/store.lua:125 -msgid "Downloading" -msgstr "" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:163 -msgid "Shortname:" -msgstr "" - -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 -msgid "Rating" -msgstr "" - -#: builtin/mainmenu/store.lua:501 -msgid "re-Install" -msgstr "" - -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "" - -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" +#: builtin/mainmenu/store.lua +msgid "Rating" msgstr "" -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" +#: builtin/mainmenu/store.lua +msgid "Search" msgstr "" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Address / Port :" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" msgstr "" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -msgid "Configure" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" msgstr "" -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" msgstr "" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" msgstr "" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" msgstr "" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" msgstr "" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" msgstr "" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" +#: builtin/mainmenu/tab_server.lua +msgid "Public" msgstr "" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" msgstr "" -#: builtin/mainmenu/tab_settings.lua:140 -msgid "Fancy Trees" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:142 -msgid "Opaque Water" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:144 -msgid "Connected Glass" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "" -#: builtin/mainmenu/tab_settings.lua:167 -msgid "Reset singleplayer world" +#: builtin/mainmenu/tab_settings.lua +msgid "Disabled" msgstr "" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " +#: builtin/mainmenu/tab_settings.lua +msgid "Enabled" msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" +#: builtin/mainmenu/tab_settings.lua +msgid "Games" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 -msgid "Bumpmapping" +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." +#: builtin/mainmenu/tab_settings.lua +msgid "Select path" msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -msgid "Start Singleplayer" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "" -#: src/client.cpp:2726 +#: src/client.cpp +msgid "Connection timed out." +msgstr "" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp msgid "Item textures..." msgstr "" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "yes" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "" - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." msgstr "" -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +msgid "Change Keys" +msgstr "" + +#: src/game.cpp +msgid "Change Password" +msgstr "" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp +msgid "Continue" +msgstr "" + +#: src/game.cpp +msgid "Creating client..." +msgstr "" + +#: src/game.cpp +msgid "Creating server..." +msgstr "" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "" + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp +msgid "Respawn" +msgstr "" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp +msgid "You died." +msgstr "" + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +#: src/guiFormSpecMenu.cpp +msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 -msgid "Left" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "" -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" msgstr "" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" +#: src/guiKeyChangeMenu.cpp +msgid "Forward" msgstr "" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" msgstr "" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "" + +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" msgstr "" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" msgstr "" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" msgstr "" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "" - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "" -#: src/keycode.cpp:224 -msgid "Left Button" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " msgstr "" -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "" + +#: src/keycode.cpp +msgid "Capital" +msgstr "" + +#: src/keycode.cpp +msgid "Clear" +msgstr "" + +#: src/keycode.cpp +msgid "Comma" +msgstr "" + +#: src/keycode.cpp +msgid "Control" +msgstr "" + +#: src/keycode.cpp +msgid "Convert" +msgstr "" + +#: src/keycode.cpp msgid "CrSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "" + +#: src/keycode.cpp +msgid "End" +msgstr "" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "" + +#: src/keycode.cpp msgid "ExSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "" + +#: src/keycode.cpp +msgid "Final" +msgstr "" + +#: src/keycode.cpp +msgid "Help" +msgstr "" + +#: src/keycode.cpp +msgid "Home" +msgstr "" + +#: src/keycode.cpp +msgid "Insert" +msgstr "" + +#: src/keycode.cpp +msgid "Junja" +msgstr "" + +#: src/keycode.cpp +msgid "Kana" +msgstr "" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "" + +#: src/keycode.cpp +msgid "Minus" +msgstr "" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "" + +#: src/keycode.cpp +msgid "Next" +msgstr "" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "" + +#: src/keycode.cpp +msgid "Period" +msgstr "" + +#: src/keycode.cpp +msgid "Plus" +msgstr "" + +#: src/keycode.cpp +msgid "Print" +msgstr "" + +#: src/keycode.cpp +msgid "Prior" +msgstr "" + +#: src/keycode.cpp +msgid "Return" +msgstr "" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Select" +msgstr "" + +#: src/keycode.cpp +msgid "Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/keycode.cpp +msgid "Space" +msgstr "" + +#: src/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/keycode.cpp +msgid "Up" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/keycode.cpp msgid "Zoom" msgstr "" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." msgstr "" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "3D clouds" msgstr "" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" +#: src/settings_translation_file.cpp +msgid "3D mode" msgstr "" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." msgstr "" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." msgstr "" -#: src/main.cpp:1953 -msgid "Invalid gamespec." +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Backward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bind address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds in menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Command key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect glass" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect to external media server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Damage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default password" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disable anticheat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double tap jump for fly" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double-tapping the jump key toggles fly mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables minimap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "yes" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Forward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If disabled " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-Game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jump key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Left key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu mod manager" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu script" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Menus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mipmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion Scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Preload inventory textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Range select key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Right key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server / Singleplayer" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooth lighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneak key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Texture path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving leaves" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" msgstr "" diff --git a/po/ky/minetest.po b/po/ky/minetest.po index 47da737b..09d16a43 100644 --- a/po/ky/minetest.po +++ b/po/ky/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" "PO-Revision-Date: 2013-06-01 18:09+0200\n" "Last-Translator: Chynggyz Jumaliev \n" "Language-Team: LANGUAGE \n" @@ -18,541 +18,604 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 1.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Башкы меню" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:26 +#: builtin/fstk/ui.lua #, fuzzy -msgid "World:" -msgstr "Дүйнөнү тандаңыз:" +msgid "Reconnect" +msgstr "Туташуу" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -#, fuzzy -msgid "Hide Game" -msgstr "Оюн" - -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Жүктөлүүдө..." + +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Cancel" +msgstr "Жокко чыгаруу" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Depends:" msgstr "көз карандылыктары:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Сактоо" - -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 -msgid "Cancel" -msgstr "Жокко чыгаруу" - -#: builtin/mainmenu/dlg_config_world.lua:68 -#, fuzzy -msgid "Enable MP" -msgstr "Баарын күйгүзүү" - -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Disable MP" msgstr "Баарын өчүрүү" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "күйгүзүлгөн" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Enable MP" +msgstr "Баарын күйгүзүү" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Enable all" msgstr "Баарын күйгүзүү" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Дүйнө аты" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Hide Game" msgstr "Оюн" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Жаратуу" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Сактоо" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "World:" +msgstr "Дүйнөнү тандаңыз:" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "күйгүзүлгөн" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Жаратуу" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Оюн" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Дүйнө аты" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "Ооба" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Ооба" + +#: builtin/mainmenu/dlg_delete_world.lua #, fuzzy msgid "Delete World \"$1\"?" msgstr "Дүйнөнү өчүрүү" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Жок" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Кабыл алуу" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "Failed to install $1 to $2" msgstr "Дүйнөнү инициалдаштыруу катасы" -#: builtin/mainmenu/modmgr.lua:366 -msgid "Install Mod: unable to find suitable foldername for modpack $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua +msgid "Close store" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Ылдый" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Дүйнө аты" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:476 -msgid "Rating" +#: builtin/mainmenu/store.lua +msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "" - -#: builtin/mainmenu/store.lua:522 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:530 -msgid "Page $1 of $2" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Алкыштар" - -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Алкыштар" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:93 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua +msgid "Mods" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Rename" msgstr "" -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:121 +#: builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Select Mod File:" msgstr "Дүйнөнү тандаңыз:" -#: builtin/mainmenu/tab_mods.lua:165 -msgid "Mods" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Address / Port :" msgstr "Дареги/порту" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp +msgid "Client" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Туташуу" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Creative mode" +msgstr "Жаратуу режими" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Damage enabled" +msgstr "күйгүзүлгөн" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Өчүрүү" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" msgstr "Аты/сырсөзү" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Public Serverlist" msgstr "Жалпылык серверлердин тизмеси:" -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Өчүрүү" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "PvP enabled" +msgstr "күйгүзүлгөн" -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Туташуу" - -#: builtin/mainmenu/tab_multiplayer.lua:252 -msgid "Client" +#: builtin/mainmenu/tab_server.lua +msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Жаңы" - -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Configure" msgstr "Ырастоо" -#: builtin/mainmenu/tab_server.lua:29 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Жаратуу режими" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Убалды күйгүзүү" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Аты/сырсөзү" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Жаңы" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Жалпылык" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Дүйнөнү тандаңыз:" + +#: builtin/mainmenu/tab_server.lua +msgid "Server" +msgstr "" + +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "" + +#: builtin/mainmenu/tab_server.lua #, fuzzy msgid "Start Game" msgstr "Оюнду баштоо/туташуу" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Дүйнөнү тандаңыз:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" -msgstr "Жаратуу режими" - -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" -msgstr "Убалды күйгүзүү" - -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Жалпылык" - -#: builtin/mainmenu/tab_server.lua:45 -msgid "Bind Address" +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" msgstr "" -#: builtin/mainmenu/tab_server.lua:174 -msgid "Server" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" -msgstr "Тегиз жарык" - -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" -msgstr "Бөлүкчөлөрдү күйгүзүү" - -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" -msgstr "3D-булуттар" - -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Кооз бактар" - -#: builtin/mainmenu/tab_settings.lua:142 -#, fuzzy -msgid "Opaque Water" -msgstr "Күңүрт суу" - -#: builtin/mainmenu/tab_settings.lua:144 -#, fuzzy -msgid "Connected Glass" -msgstr "Туташуу" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-текстуралоо" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Анизатропия чыпкалоосу" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Экисызык чыпкалоосу" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Үчсызык чыпкалоосу" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "Көлөкөлөгүчтөр" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Баскычтарды өзгөртүү" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Reset singleplayer world" -msgstr "Бир кишилик" +msgid "Disabled" +msgstr "Баарын өчүрүү" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Bumpmapping" -msgstr "Mip-текстуралоо" +msgid "Enabled" +msgstr "күйгүзүлгөн" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Games" +msgstr "Оюн" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Тандоо" + +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Ырастоолор" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Бир кишилик" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Ырастоо" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Башкы меню" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Бир кишилик" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Ойноо" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Бир кишилик" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "" -#: src/client.cpp:2726 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Туташтыруу катасы (убактыңыз өтүп кеттиби?)" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp msgid "Item textures..." msgstr "Буюм текстуралары..." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +#, fuzzy +msgid "Loading textures..." +msgstr "Жүктөлүүдө..." + +#: src/client.cpp +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Дареги чечилүүдө..." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "Туташтыруу катасы (убактыңыз өтүп кеттиби?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Оюнду табуу же жүктөө мүмкүн эмес \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Башкы меню" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Дүйнө тандалган жок жана дареги киргизилген жок. Кылууга эч нерсе жок." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "Кайтадан жаралуу" - -#: src/game.cpp:2250 -#, fuzzy -msgid "Item definitions..." -msgstr "Буюм текстуралары..." - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." @@ -560,493 +623,2897 @@ msgstr "" "\n" "Толугураак маалымат үчүн, debug.txt'ти текшериңиз." -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Баскычтарды өзгөртүү" + +#: src/game.cpp +msgid "Change Password" +msgstr "Сырсөздү өзгөртүү" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Серверге туташтырылууда..." + +#: src/game.cpp +msgid "Continue" +msgstr "Улантуу" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Клиент жаратылууда..." + +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "Сервер жаратылууда...." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Жарыяланбас башкаруу:\n" +"- WASD: басуу\n" +"- Боштугу: секирүү/өйдө чыгуу\n" +"- Shift: уурданып басуу/ылдый түшүү\n" +"- Q: буюмду таштоо\n" +"- I: мүлк-шайман\n" +"- Чычканы: бурулуу/кароо\n" +"- Сол чычкан баскычы: казуу/согуу\n" +"- Оң чычкан баскычы: коюу/колдонуу\n" +"- Чычкан дөңгөлөгү: буюмду тандоо\n" +"- T: маек\n" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "Менюга чыгуу" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "Оюндан чыгуу" + +#: src/game.cpp +#, fuzzy +msgid "Item definitions..." +msgstr "Буюм текстуралары..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Улантуу" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "Дареги чечилүүдө..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Кайтадан жаралуу" + +#: src/game.cpp +#, fuzzy +msgid "Shutting down..." +msgstr "Оюн өчүрүлүүдө..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Үн көлөмү" + +#: src/game.cpp +msgid "You died." +msgstr "Сиз өлдүңүз." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +#: src/guiFormSpecMenu.cpp +msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "баскычты басыңыз" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "Алга" - -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "Артка" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 -msgid "Left" -msgstr "Солго" - -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Оңго" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Колдонуу" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Секирүү" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "Уурданып басуу" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "Ыргытуу" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "Мүлк-шайман" - -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "Маек" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "Команда" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "Консоль" -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "Учууга которуу" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "Тез басууга которуу" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Ыргытуу" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Алга" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Мүлк-шайман" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Секирүү" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" msgstr "" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Солго" + +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" -msgstr "Эски сырсөз" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" -msgstr "Жаңы сырсөз" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Оңго" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" -msgstr "Сырсөздү аныктоо" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Уурданып басуу" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Тез басууга которуу" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Тез басууга которуу" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Учууга которуу" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Колдонуу" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "баскычты басыңыз" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Өзгөртүү" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Сырсөздү аныктоо" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Жаңы сырсөз" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Эски сырсөз" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Сырсөздөр дал келген жок!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "Үн көлөмү: " - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Чыгуу" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Сол баскыч" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Үн көлөмү: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Ортоңку баскыч" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Оң баскыч" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "Артка" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "Тазалоо" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Caps Lock" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Ctrl" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Кана" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Меню" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Пауза" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Esc" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Кандзи" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "Режимди өзгөртүү" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Кийинки" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Боштук" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Ылдый" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Аткаруу" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Басма" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Тандоо" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Өйдө" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Жардам" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "Тез сүрөт" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "Сол Windows" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "Тиркемелер" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Кош. клав. 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Кош. клав. 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "Оң Windows" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Уйку" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Кош. клав. 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Кош. клав. 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Кош. клав. 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Кош. клав. 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Кош. клав. 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Кош. клав. 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Кош. клав. *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Кош. клав. +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Кош. клав. -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Кош. клав. /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Кош. клав. 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Кош. клав. 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Сол Shift" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Оң Shift" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Сол Ctrl" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Сол меню" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Оң Ctrl" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Оң меню" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Үтүр" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "Кемитүү белгиси" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "Айланма сан" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Кошуу белгиси" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "Артка" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Caps Lock" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Тазалоо" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Үтүр" + +#: src/keycode.cpp +msgid "Control" +msgstr "Ctrl" + +#: src/keycode.cpp +msgid "Convert" +msgstr "" + +#: src/keycode.cpp msgid "CrSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "Ылдый" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Esc" + +#: src/keycode.cpp msgid "ExSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "Аткаруу" + +#: src/keycode.cpp +msgid "Final" +msgstr "" + +#: src/keycode.cpp +msgid "Help" +msgstr "Жардам" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Кана" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Кандзи" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Сол баскыч" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Сол Ctrl" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Сол меню" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Сол Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Сол Windows" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Меню" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Ортоңку баскыч" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Кемитүү белгиси" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Режимди өзгөртүү" + +#: src/keycode.cpp +msgid "Next" +msgstr "Кийинки" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Кош. клав. *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Кош. клав. +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Кош. клав. -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Кош. клав. /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Кош. клав. 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Кош. клав. 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Кош. клав. 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Кош. клав. 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Кош. клав. 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Кош. клав. 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Кош. клав. 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Кош. клав. 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Кош. клав. 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Кош. клав. 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "Пауза" + +#: src/keycode.cpp +msgid "Period" +msgstr "Айланма сан" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Кошуу белгиси" + +#: src/keycode.cpp +msgid "Print" +msgstr "Басма" + +#: src/keycode.cpp +msgid "Prior" +msgstr "" + +#: src/keycode.cpp +msgid "Return" +msgstr "" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Оң баскыч" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Оң Ctrl" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Оң меню" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Оң Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Оң Windows" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Тандоо" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Уйку" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Тез сүрөт" + +#: src/keycode.cpp +msgid "Space" +msgstr "Боштук" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Өйдө" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/keycode.cpp msgid "Zoom" msgstr "Масштаб" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "3D-булуттар" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "Кошумча" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Анизатропия чыпкалоосу" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Артка" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Экисызык чыпкалоосу" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Дареги чечилүүдө..." + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Build inside player" +msgstr "Көп кишилик" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bumpmapping" +msgstr "Mip-текстуралоо" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Баскычтарды өзгөртүү" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Баскычтарды өзгөртүү" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Жаратуу режими" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Жаратуу режими" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "3D-булуттар" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" msgstr "Башкы меню" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "Colored fog" msgstr "" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Туташтыруу катасы (убактыңыз өтүп кеттиби?)" - -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Дүйнө тандалган жок жана дареги киргизилген жок. Кылууга эч нерсе жок." - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Оюнду табуу же жүктөө мүмкүн эмес \"" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Команда" -#: src/main.cpp:1953 -msgid "Invalid gamespec." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Туташуу" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Серверге туташтырылууда..." + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." msgstr "" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Сол баскычы: Бардык буюмдарды ташуу, Оң баскычы: Бир буюмду ташуу" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Консоль" -#~ msgid "is required by:" -#~ msgstr "талап кылынганы:" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Консоль" -#~ msgid "Configuration saved. " -#~ msgstr "Конфигурация сакталды. " +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Консоль" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Эскертүү: Туура эмес конфигурация. " +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" -#~ msgid "Multiplayer" -#~ msgstr "Көп кишилик" +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" -#~ msgid "Advanced" -#~ msgstr "Кошумча" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Ctrl" -#~ msgid "Show Public" -#~ msgstr "Жалпылыкты көрсөтүү" +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" -#~ msgid "Show Favorites" -#~ msgstr "Тандалмаларды көрсөтүү" +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Жергиликтүү серверди жүргүзүү үчүн даректи бош калтырыңыз." +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" -#~ msgid "Create world" -#~ msgstr "Дүйнөнү жаратуу" +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" -#~ msgid "Address required." -#~ msgstr "Дареги талап кылынат." +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Дүнөнү жаратуу мүмкүн эмес: Эч нерсе тандалган жок" +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" -#~ msgid "Files to be deleted" -#~ msgstr "Өчүрүлө турган файлдар" +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" -#~ msgid "Cannot create world: No games found" -#~ msgstr "Дүйнөнү жаратуу мүмкүн эмес: Оюндар табылган жок" +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Дүйнөнү ырастоо мүмкүн эмес: Эч нерсе тандалган жок" +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" -#~ msgid "Failed to delete all world files" -#~ msgstr "Бардык дүйнө файлдарын өчүрүү оңунан чыккан жок" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Убалды күйгүзүү" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Жаңы сырсөз" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Бөлүкчөлөрдү күйгүзүү" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double tap jump for fly" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double-tapping the jump key toggles fly mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Убалды күйгүзүү" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Анизатропия чыпкалоосу" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Алга" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Баарын өчүрүү" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "күйгүзүлгөн" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Оюн" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Мүлк-шайман" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Секирүү" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Сол меню" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Башкы меню" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Башкы меню" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Меню" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Mip-текстуралоо" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion Scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Жүктөлүүдө..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Range select key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Оң меню" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Тез сүрөт" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Бир кишилик" + +#: src/settings_translation_file.cpp +msgid "Server URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server port" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Жалпылык серверлердин тизмеси:" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Жалпылык серверлердин тизмеси:" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Көлөкөлөгүчтөр" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Тегиз жарык" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Уурданып басуу" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Texture path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Үчсызык чыпкалоосу" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "баскычты басыңыз" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Үн көлөмү" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Кооз бактар" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#, fuzzy +#~ msgid "Game Name" +#~ msgstr "Оюн" + +#~ msgid "Favorites:" +#~ msgstr "Тандалмалар:" + +#, fuzzy +#~ msgid "Password" +#~ msgstr "Эски сырсөз" + +#, fuzzy +#~ msgid "Finite Liquid" +#~ msgstr "Чектүү суюктук" #~ msgid "" #~ "Default Controls:\n" @@ -1073,82 +3540,60 @@ msgstr "" #~ "- ESC: бул меню\n" #~ "- T: маек\n" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Жарыяланбас башкаруу:\n" -#~ "- WASD: басуу\n" -#~ "- Боштугу: секирүү/өйдө чыгуу\n" -#~ "- Shift: уурданып басуу/ылдый түшүү\n" -#~ "- Q: буюмду таштоо\n" -#~ "- I: мүлк-шайман\n" -#~ "- Чычканы: бурулуу/кароо\n" -#~ "- Сол чычкан баскычы: казуу/согуу\n" -#~ "- Оң чычкан баскычы: коюу/колдонуу\n" -#~ "- Чычкан дөңгөлөгү: буюмду тандоо\n" -#~ "- T: маек\n" +#~ msgid "Failed to delete all world files" +#~ msgstr "Бардык дүйнө файлдарын өчүрүү оңунан чыккан жок" -#~ msgid "Exit to OS" -#~ msgstr "Оюндан чыгуу" +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Дүйнөнү ырастоо мүмкүн эмес: Эч нерсе тандалган жок" -#~ msgid "Exit to Menu" -#~ msgstr "Менюга чыгуу" +#~ msgid "Cannot create world: No games found" +#~ msgstr "Дүйнөнү жаратуу мүмкүн эмес: Оюндар табылган жок" -#~ msgid "Sound Volume" -#~ msgstr "Үн көлөмү" +#~ msgid "Files to be deleted" +#~ msgstr "Өчүрүлө турган файлдар" -#~ msgid "Change Password" -#~ msgstr "Сырсөздү өзгөртүү" +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Дүнөнү жаратуу мүмкүн эмес: Эч нерсе тандалган жок" -#~ msgid "Continue" -#~ msgstr "Улантуу" +#~ msgid "Address required." +#~ msgstr "Дареги талап кылынат." -#~ msgid "You died." -#~ msgstr "Сиз өлдүңүз." +#~ msgid "Create world" +#~ msgstr "Дүйнөнү жаратуу" -#~ msgid "Shutting down stuff..." -#~ msgstr "Оюн өчүрүлүүдө..." +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Жергиликтүү серверди жүргүзүү үчүн даректи бош калтырыңыз." -#~ msgid "Connecting to server..." -#~ msgstr "Серверге туташтырылууда..." +#~ msgid "Show Favorites" +#~ msgstr "Тандалмаларды көрсөтүү" -#~ msgid "Resolving address..." -#~ msgstr "Дареги чечилүүдө..." +#~ msgid "Show Public" +#~ msgstr "Жалпылыкты көрсөтүү" -#~ msgid "Creating client..." -#~ msgstr "Клиент жаратылууда..." +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Эскертүү: Туура эмес конфигурация. " -#~ msgid "Creating server...." -#~ msgstr "Сервер жаратылууда...." +#~ msgid "Configuration saved. " +#~ msgstr "Конфигурация сакталды. " -#~ msgid "Loading..." -#~ msgstr "Жүктөлүүдө..." +#~ msgid "is required by:" +#~ msgstr "талап кылынганы:" + +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Сол баскычы: Бардык буюмдарды ташуу, Оң баскычы: Бир буюмду ташуу" #, fuzzy -#~ msgid "Finite Liquid" -#~ msgstr "Чектүү суюктук" +#~ msgid "Downloading" +#~ msgstr "Ылдый" #, fuzzy -#~ msgid "Password" -#~ msgstr "Эски сырсөз" - -#~ msgid "Favorites:" -#~ msgstr "Тандалмалар:" +#~ msgid "Reset singleplayer world" +#~ msgstr "Бир кишилик" #, fuzzy -#~ msgid "Games" -#~ msgstr "Оюн" +#~ msgid "Opaque Water" +#~ msgstr "Күңүрт суу" #, fuzzy -#~ msgid "Game Name" -#~ msgstr "Оюн" +#~ msgid "Opaque Leaves" +#~ msgstr "Күңүрт суу" diff --git a/po/lt/minetest.po b/po/lt/minetest.po index 28054b77..6e424815 100644 --- a/po/lt/minetest.po +++ b/po/lt/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" "PO-Revision-Date: 2013-12-11 19:23+0200\n" "Last-Translator: Jonas Kriaučiūnas \n" "Language-Team: LANGUAGE \n" @@ -19,1059 +19,3517 @@ msgstr "" "%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Pagrindinis meniu" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Gerai" -#: builtin/mainmenu/dlg_config_world.lua:26 -msgid "World:" -msgstr "Pasaulis:" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Jungtis" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -msgid "Hide Game" -msgstr "Slėpti vidinius" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" -msgstr "Slėpti papild. pakų turinį" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Įkeliama..." -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" -msgstr "Papildinys:" +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 -msgid "Depends:" -msgstr "Priklauso:" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Įrašyti" +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "Atsisakyti" -#: builtin/mainmenu/dlg_config_world.lua:68 -msgid "Enable MP" -msgstr "Įjungti papildinį" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Priklauso:" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Išjungti papildinį" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "įjungtas" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Įjungti papildinį" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Įjungti visus" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Pasaulio pavadinimas" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Slėpti vidinius" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Slėpti papild. pakų turinį" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Papildinys:" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Įrašyti" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Pasaulis:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "įjungtas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "Pasaulis, pavadintas „$1“ jau yra" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Sukurti" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Žaidimas" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No worldname given or no game selected" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua #, fuzzy msgid "Seed" msgstr "Sėkla" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Žaidimas" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Sukurti" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:72 +#: builtin/mainmenu/dlg_create_world.lua msgid "Warning: The minimal development test is meant for developers." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Pasaulio pavadinimas" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:97 -msgid "A world named \"$1\" already exists" -msgstr "Pasaulis, pavadintas „$1“ jau yra" - -#: builtin/mainmenu/dlg_create_world.lua:116 -msgid "No worldname given or no game selected" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "Taip" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Taip" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Ištrinti pasaulį „$1“?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Ne" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Pervadinti papildinių paką:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp #, fuzzy msgid "Accept" msgstr "Priimti" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" -msgstr "" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Pervadinti papildinių paką:" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Nepavyko įdiegti $1 į $2" -#: builtin/mainmenu/modmgr.lua:366 -msgid "Install Mod: unable to find suitable foldername for modpack $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua +msgid "Close store" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Įdiegti" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -msgid "Downloading" -msgstr "" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Pasaulio pavadinimas" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:476 -msgid "Rating" +#: builtin/mainmenu/store.lua +msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "Įdiegti iš naujo" -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "Įdiegti" - -#: builtin/mainmenu/store.lua:522 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:530 -msgid "Page $1 of $2" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Padėkos" - -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "Pagrindiniai kūrėjai" - -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Aktyvūs pagalbininkai" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Pagrindiniai kūrėjai" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Padėkos" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +#, fuzzy +msgid "Previous Core Developers" +msgstr "Pagrindiniai kūrėjai" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Įdiegti papildiniai:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Papildiniai internete" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Papildinio aprašymas nepateiktas" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Papildinio informacija:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Pervadinti" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Pašalinti pasirinktą papildinį" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Pašalinti pasirinktą papildinį" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Pasirinkite papildinio failą:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "Papildiniai" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Papildinio aprašymas nepateiktas" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Pervadinti" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Pasirinkite papildinio failą:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Pašalinti pasirinktą papildinį" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Pašalinti pasirinktą papildinį" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Address / Port :" msgstr "Adresas/Prievadas" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Vardas/slaptažodis" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Viešų serverių sąrašas" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Ištrinti" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Jungtis" - -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "Žaisti tinkle(klientas)" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Naujas" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Jungtis" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Creative mode" +msgstr "Kūrybinė veiksena" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Damage enabled" +msgstr "įjungtas" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Ištrinti" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Vardas/slaptažodis" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Viešų serverių sąrašas" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "PvP enabled" +msgstr "įjungtas" + +#: builtin/mainmenu/tab_server.lua +msgid "Bind Address" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Configure" msgstr "Konfigūruoti" -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Pradėti žaidimą" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Pasirinkite pasaulį:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua #, fuzzy msgid "Creative Mode" msgstr "Kūrybinė veiksena" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Enable Damage" msgstr "Leisti sužeidimus" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Viešas" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Vardas/slaptažodis" -#: builtin/mainmenu/tab_server.lua:45 -msgid "Bind Address" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Naujas" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Serverio prievadas" +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Viešas" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Pasirinkite pasaulį:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Serveris" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Serverio prievadas" + +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Pradėti žaidimą" + +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 -#, fuzzy -msgid "Smooth Lighting" -msgstr "Apšvietimo efektai" - -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" msgstr "" -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" -msgstr "Trimačiai debesys" - -#: builtin/mainmenu/tab_settings.lua:140 -msgid "Fancy Trees" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:142 -msgid "Opaque Water" -msgstr "Nepermatomas vanduo" - -#: builtin/mainmenu/tab_settings.lua:144 -#, fuzzy -msgid "Connected Glass" -msgstr "Jungtis" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:160 -#, fuzzy -msgid "Shaders" -msgstr "Šešėliai" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Nustatyti klavišus" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Reset singleplayer world" -msgstr "Žaisti vienam" +msgid "Disabled" +msgstr "Išjungti papildinį" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Enabled" +msgstr "įjungtas" + +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" +#: builtin/mainmenu/tab_settings.lua +msgid "Games" +msgstr "Žaidimai" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 -msgid "Bumpmapping" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Select path" msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Nustatymai" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Žaisti vienam" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Konfigūruoti" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Pagrindinis meniu" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Žaisti vienam" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Žaisti" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Žaisti vienam" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "" -#: src/client.cpp:2726 +#: src/client.cpp +msgid "Connection timed out." +msgstr "" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp msgid "Item textures..." msgstr "" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +#, fuzzy +msgid "Loading textures..." +msgstr "Įkeliama..." + +#: src/client.cpp +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Ieškoma adreso..." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Pagrindinis meniu" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "Prisikelti" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "" - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." msgstr "" -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Nustatyti klavišus" + +#: src/game.cpp +msgid "Change Password" +msgstr "Keisti slaptažodį" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Jungiamasi prie serverio..." + +#: src/game.cpp +msgid "Continue" +msgstr "Tęsti" + +#: src/game.cpp +#, fuzzy +msgid "Creating client..." +msgstr "Kuriamas klientas..." + +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "Kuriamas serveris...." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "Grįžti į meniu" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "Išeiti iš žaidimo" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "" + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/game.cpp src/guiFormSpecMenu.cpp #, fuzzy msgid "Proceed" msgstr "Tęsti" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "Ieškoma adreso..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Prisikelti" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp +msgid "You died." +msgstr "Jūs numirėte." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +#: src/guiFormSpecMenu.cpp +msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "Klavišas jau naudojamas" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "paspauskite klavišą" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "Pirmyn" - -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "Atgal" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 -msgid "Left" -msgstr "Kairėn" - -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Dešinėn" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Naudoti" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Pašokti" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "Mesti" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "Inventorius" - -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "Susirašinėti" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "Komanda" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "" -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Mesti" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Pirmyn" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventorius" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Pašokti" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Klavišas jau naudojamas" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Kairėn" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" -msgstr "Senas slaptažodis" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" -msgstr "Naujas slaptažodis" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Dešinėn" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" -msgstr "Patvirtinti slaptažodį" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Naudoti" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "paspauskite klavišą" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Pakeisti" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Patvirtinti slaptažodį" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Naujas slaptažodis" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Senas slaptažodis" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Slaptažodžiai nesutampa!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "" - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Išeiti" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Kairysis mygtukas" - -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Vidurinis mygtukas" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Dešinysis mygtukas" - -#: src/keycode.cpp:224 -msgid "X Button 1" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " msgstr "" -#: src/keycode.cpp:225 -msgid "Back" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Meniu" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Shift (Lyg2)" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Tarpas" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Žemyn" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Vykdyti" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Aukštyn" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Pagalba" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Įterpti" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Kairysis Shift" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Dešinysis Shift" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Kairysis Control" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Dešinysis Control" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Kablelis" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Plius" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "" + +#: src/keycode.cpp +msgid "Capital" +msgstr "" + +#: src/keycode.cpp +msgid "Clear" +msgstr "" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Kablelis" + +#: src/keycode.cpp +msgid "Control" +msgstr "" + +#: src/keycode.cpp +msgid "Convert" +msgstr "" + +#: src/keycode.cpp msgid "CrSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "Žemyn" + +#: src/keycode.cpp +msgid "End" +msgstr "" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "" + +#: src/keycode.cpp msgid "ExSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "Vykdyti" + +#: src/keycode.cpp +msgid "Final" +msgstr "" + +#: src/keycode.cpp +msgid "Help" +msgstr "Pagalba" + +#: src/keycode.cpp +msgid "Home" +msgstr "" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Įterpti" + +#: src/keycode.cpp +msgid "Junja" +msgstr "" + +#: src/keycode.cpp +msgid "Kana" +msgstr "" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Kairysis mygtukas" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Kairysis Control" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Kairysis Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Meniu" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Vidurinis mygtukas" + +#: src/keycode.cpp +msgid "Minus" +msgstr "" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "" + +#: src/keycode.cpp +msgid "Next" +msgstr "" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "" + +#: src/keycode.cpp +msgid "Period" +msgstr "" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plius" + +#: src/keycode.cpp +msgid "Print" +msgstr "" + +#: src/keycode.cpp +msgid "Prior" +msgstr "" + +#: src/keycode.cpp +msgid "Return" +msgstr "" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Dešinysis mygtukas" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Dešinysis Control" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Dešinysis Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Select" +msgstr "" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift (Lyg2)" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/keycode.cpp +msgid "Space" +msgstr "Tarpas" + +#: src/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/keycode.cpp +msgid "Up" +msgstr "Aukštyn" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/keycode.cpp #, fuzzy msgid "Zoom" msgstr "Pritraukti" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "Trimačiai debesys" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Atgal" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Ieškoma adreso..." + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Nustatyti klavišus" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Nustatyti klavišus" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Kūrybinė veiksena" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Kūrybinė veiksena" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "Trimačiai debesys" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" msgstr "Pagrindinis meniu" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "Colored fog" msgstr "" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." msgstr "" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "" - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "" - -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "" - -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "" - -#~ msgid "Exit to OS" -#~ msgstr "Išeiti iš žaidimo" - -#~ msgid "Exit to Menu" -#~ msgstr "Grįžti į meniu" - -#~ msgid "Change Password" -#~ msgstr "Keisti slaptažodį" - -#~ msgid "Continue" -#~ msgstr "Tęsti" - -#~ msgid "You died." -#~ msgstr "Jūs numirėte." - -#~ msgid "Connecting to server..." -#~ msgstr "Jungiamasi prie serverio..." - -#~ msgid "Resolving address..." -#~ msgstr "Ieškoma adreso..." - +#: src/settings_translation_file.cpp #, fuzzy -#~ msgid "Creating client..." -#~ msgstr "Kuriamas klientas..." +msgid "Command key" +msgstr "Komanda" -#~ msgid "Creating server...." -#~ msgstr "Kuriamas serveris...." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Jungtis" -#~ msgid "Loading..." -#~ msgstr "Įkeliama..." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Jungiamasi prie serverio..." -#~ msgid "Add mod:" -#~ msgstr "Pridėti papildinį:" +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" -#~ msgid "MODS" -#~ msgstr "PAPILDINIAI" +#: src/settings_translation_file.cpp +msgid "Console alpha" +msgstr "" -#~ msgid "SINGLE PLAYER" -#~ msgstr "VIENAS ŽAIDĖJAS" +#: src/settings_translation_file.cpp +msgid "Console color" +msgstr "" -#~ msgid "SETTINGS" -#~ msgstr "NUSTATYMAI" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Nustatyti klavišus" -#~ msgid "Password" -#~ msgstr "Slaptažodis" +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" -#~ msgid "Name" -#~ msgstr "Vardas" +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" -#~ msgid "START SERVER" -#~ msgstr "PALEISTI SERVERĮ" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Kairysis Control" -#~ msgid "Favorites:" -#~ msgstr "Mėgiami:" +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" -#~ msgid "CLIENT" -#~ msgstr "ŽAISTI TINKLE" +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Pridėti papildinį" +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" -#~ msgid "Remove selected mod" -#~ msgstr "Pašalinti pasirinktą papildinį" +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Leisti sužeidimus" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default game" +msgstr "keisti žaidimą" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Naujas slaptažodis" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disable anticheat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double tap jump for fly" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double-tapping the jump key toggles fly mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "Papildiniai internete" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Leisti sužeidimus" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Pirmyn" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Išjungti papildinį" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "įjungtas" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Žaidimas" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Inventorius" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Pašokti" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Kairėn" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Pagrindinis meniu" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Pagrindinis meniu" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Meniu" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mipmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion Scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Įkeliama..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Range select key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Dešinėn" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Žaisti vienam" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Serveris" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Serverio prievadas" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "Serverio prievadas" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Serveris" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Serverio prievadas" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Viešų serverių sąrašas" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Viešų serverių sąrašas" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Shaders" +msgstr "Šešėliai" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Apšvietimo efektai" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Nustatyti klavišus" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Texture path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "paspauskite klavišą" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Pagrindiniai kūrėjai" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving leaves" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Game Name" +#~ msgstr "Žaidimo pavadinimas" + +#~ msgid "GAMES" +#~ msgstr "ŽAIDIMAI" + +#~ msgid "Mods:" +#~ msgstr "Papildiniai:" + +#~ msgid "new game" +#~ msgstr "naujas žaidimas" #, fuzzy #~ msgid "EDIT GAME" #~ msgstr "KEISTI ŽAIDIMĄ" -#~ msgid "new game" -#~ msgstr "naujas žaidimas" +#~ msgid "Remove selected mod" +#~ msgstr "Pašalinti pasirinktą papildinį" -#~ msgid "edit game" -#~ msgstr "keisti žaidimą" +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Pridėti papildinį" -#~ msgid "Mods:" -#~ msgstr "Papildiniai:" +#~ msgid "CLIENT" +#~ msgstr "ŽAISTI TINKLE" -#~ msgid "Games" -#~ msgstr "Žaidimai" +#~ msgid "Favorites:" +#~ msgstr "Mėgiami:" -#~ msgid "GAMES" -#~ msgstr "ŽAIDIMAI" +#~ msgid "START SERVER" +#~ msgstr "PALEISTI SERVERĮ" -#~ msgid "Game Name" -#~ msgstr "Žaidimo pavadinimas" +#~ msgid "Name" +#~ msgstr "Vardas" + +#~ msgid "Password" +#~ msgstr "Slaptažodis" + +#~ msgid "SETTINGS" +#~ msgstr "NUSTATYMAI" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "VIENAS ŽAIDĖJAS" + +#~ msgid "MODS" +#~ msgstr "PAPILDINIAI" + +#~ msgid "Add mod:" +#~ msgstr "Pridėti papildinį:" + +#, fuzzy +#~ msgid "Reset singleplayer world" +#~ msgstr "Žaisti vienam" + +#~ msgid "Opaque Water" +#~ msgstr "Nepermatomas vanduo" + +#, fuzzy +#~ msgid "Opaque Leaves" +#~ msgstr "Nepermatomas vanduo" diff --git a/po/minetest.pot b/po/minetest.pot index 9dc989a7..f48e7679 100644 --- a/po/minetest.pot +++ b/po/minetest.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-14 16:32+0100\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,581 +17,587 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: builtin/fstk/ui.lua:67 builtin/mainmenu/store.lua:165 +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:29 +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua msgid "World:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:33 -#: builtin/mainmenu/dlg_config_world.lua:35 +#: builtin/mainmenu/dlg_config_world.lua msgid "Hide Game" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:39 -#: builtin/mainmenu/dlg_config_world.lua:41 +#: builtin/mainmenu/dlg_config_world.lua msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:49 +#: builtin/mainmenu/dlg_config_world.lua msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 builtin/mainmenu/tab_mods.lua:99 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua msgid "Depends:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:54 src/guiKeyChangeMenu.cpp:192 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp msgid "Save" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:55 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:200 -#: src/keycode.cpp:224 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:71 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable MP" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:73 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:77 -#: builtin/mainmenu/dlg_config_world.lua:79 +#: builtin/mainmenu/dlg_config_world.lua msgid "enabled" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:85 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:50 +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua msgid "World name" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 +#: builtin/mainmenu/dlg_create_world.lua msgid "Seed" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Mapgen" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:59 +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp msgid "Game" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:63 +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:68 +#: builtin/mainmenu/dlg_create_world.lua msgid "You have no subgames installed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 +#: builtin/mainmenu/dlg_create_world.lua msgid "Download one from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:72 +#: builtin/mainmenu/dlg_create_world.lua msgid "Warning: The minimal development test is meant for developers." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:73 +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a subgame, such as minetest_game, from minetest.net" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:99 +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:79 +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua msgid "Yes" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:28 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "No of course not!" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 +#: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "" -#: builtin/mainmenu/modmgr.lua:342 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 +#: builtin/mainmenu/store.lua msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:580 +#: builtin/mainmenu/store.lua msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:126 +#: builtin/mainmenu/store.lua msgid "Downloading $1, please wait..." msgstr "" -#: builtin/mainmenu/store.lua:160 +#: builtin/mainmenu/store.lua msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:162 +#: builtin/mainmenu/store.lua msgid "Shortname:" msgstr "" -#: builtin/mainmenu/store.lua:472 +#: builtin/mainmenu/store.lua msgid "Rating" msgstr "" -#: builtin/mainmenu/store.lua:497 +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:499 +#: builtin/mainmenu/store.lua msgid "Install" msgstr "" -#: builtin/mainmenu/store.lua:518 +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:526 +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "" -#: builtin/mainmenu/tab_credits.lua:22 +#: builtin/mainmenu/tab_credits.lua msgid "Credits" msgstr "" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/tab_credits.lua msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 +#: builtin/mainmenu/tab_mods.lua msgid "No mod description available" msgstr "" -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:93 +#: builtin/mainmenu/tab_mods.lua msgid "Rename" msgstr "" -#: builtin/mainmenu/tab_mods.lua:95 +#: builtin/mainmenu/tab_mods.lua msgid "Uninstall selected modpack" msgstr "" -#: builtin/mainmenu/tab_mods.lua:106 +#: builtin/mainmenu/tab_mods.lua msgid "Uninstall selected mod" msgstr "" -#: builtin/mainmenu/tab_mods.lua:121 +#: builtin/mainmenu/tab_mods.lua msgid "Select Mod File:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:23 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:24 +#: builtin/mainmenu/tab_multiplayer.lua msgid "Name / Password :" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Public Serverlist" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Delete" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Connect" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:62 -#: builtin/mainmenu/tab_simple_main.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Creative mode" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:63 -#: builtin/mainmenu/tab_simple_main.lua:46 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "Damage enabled" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:64 -#: builtin/mainmenu/tab_simple_main.lua:47 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua msgid "PvP enabled" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:257 +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "New" msgstr "" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Configure" msgstr "" -#: builtin/mainmenu/tab_server.lua:29 +#: builtin/mainmenu/tab_server.lua msgid "Start Game" msgstr "" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Select World:" msgstr "" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:76 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Creative Mode" msgstr "" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:78 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Enable Damage" msgstr "" -#: builtin/mainmenu/tab_server.lua:35 +#: builtin/mainmenu/tab_server.lua msgid "Public" msgstr "" -#: builtin/mainmenu/tab_server.lua:37 builtin/mainmenu/tab_simple_main.lua:25 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua msgid "Name/Password" msgstr "" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:51 +#: builtin/mainmenu/tab_server.lua msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "" -#: builtin/mainmenu/tab_settings.lua:21 -msgid "No Filter" +#: builtin/mainmenu/tab_settings.lua +msgid "Games" msgstr "" -#: builtin/mainmenu/tab_settings.lua:22 -msgid "Bilinear Filter" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Trilinear Filter" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:32 -msgid "No Mipmap" +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:33 -msgid "Mipmap" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:34 -msgid "Mipmap + Aniso. Filter" +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:77 -msgid "Are you sure to reset your singleplayer world?" +#: builtin/mainmenu/tab_settings.lua +msgid "Disabled" msgstr "" -#: builtin/mainmenu/tab_settings.lua:81 -msgid "No!!!" +#: builtin/mainmenu/tab_settings.lua +msgid "Enabled" msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Smooth Lighting" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" msgstr "" -#: builtin/mainmenu/tab_settings.lua:183 -msgid "Enable Particles" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:185 -msgid "3D Clouds" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Fancy Trees" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." msgstr "" -#: builtin/mainmenu/tab_settings.lua:189 -msgid "Opaque Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:191 -msgid "Connected Glass" +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_settings.lua:193 -msgid "Node Highlighting" +#: builtin/mainmenu/tab_settings.lua +msgid "Select path" msgstr "" -#: builtin/mainmenu/tab_settings.lua:196 -msgid "Texturing:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:201 -msgid "Rendering:" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:205 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:207 -msgid "Shaders" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:212 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "" -#: builtin/mainmenu/tab_settings.lua:215 -msgid "Reset singleplayer world" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:219 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" msgstr "" -#: builtin/mainmenu/tab_settings.lua:223 -msgid "Scaling factor applied to menu elements: " +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_settings.lua:229 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:235 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:242 builtin/mainmenu/tab_settings.lua:256 -msgid "Bumpmapping" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:244 builtin/mainmenu/tab_settings.lua:257 -msgid "Generate Normalmaps" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:246 builtin/mainmenu/tab_settings.lua:258 -msgid "Parallax Occlusion" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:248 builtin/mainmenu/tab_settings.lua:259 -msgid "Waving Water" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:250 builtin/mainmenu/tab_settings.lua:260 -msgid "Waving Leaves" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:252 builtin/mainmenu/tab_settings.lua:261 -msgid "Waving Plants" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:287 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:398 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:80 -msgid "Fly mode" -msgstr "" - -#: builtin/mainmenu/tab_simple_main.lua:84 +#: builtin/mainmenu/tab_simple_main.lua msgid "Start Singleplayer" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:85 +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:208 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:49 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Select texture pack:" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "" -#: src/client.cpp:1563 +#: src/client.cpp +msgid "Connection timed out." +msgstr "" + +#: src/client.cpp msgid "Loading textures..." msgstr "" -#: src/client.cpp:1573 +#: src/client.cpp msgid "Rebuilding shaders..." msgstr "" -#: src/client.cpp:1580 +#: src/client.cpp msgid "Initializing nodes..." msgstr "" -#: src/client.cpp:1595 +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp msgid "Item textures..." msgstr "" -#: src/client.cpp:1620 +#: src/client.cpp msgid "Done!" msgstr "" -#: src/client/clientlauncher.cpp:172 +#: src/client/clientlauncher.cpp msgid "Main Menu" msgstr "" -#: src/client/clientlauncher.cpp:210 +#: src/client/clientlauncher.cpp msgid "Player name too long." msgstr "" -#: src/client/clientlauncher.cpp:248 +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "" -#: src/client/clientlauncher.cpp:413 +#: src/client/clientlauncher.cpp msgid "No world selected and no address provided. Nothing to do." msgstr "" -#: src/client/clientlauncher.cpp:420 +#: src/client/clientlauncher.cpp msgid "Provided world path doesn't exist: " msgstr "" -#: src/client/clientlauncher.cpp:429 +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "" -#: src/client/clientlauncher.cpp:447 +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1061 src/guiFormSpecMenu.cpp:2008 +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "" -#: src/game.cpp:1081 +#: src/game.cpp msgid "You died." msgstr "" -#: src/game.cpp:1082 +#: src/game.cpp msgid "Respawn" msgstr "" -#: src/game.cpp:1101 +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -607,7 +613,7 @@ msgid "" " --> place single item to slot\n" msgstr "" -#: src/game.cpp:1115 +#: src/game.cpp msgid "" "Default Controls:\n" "- WASD: move\n" @@ -622,492 +628,2778 @@ msgid "" "- T: chat\n" msgstr "" -#: src/game.cpp:1134 +#: src/game.cpp msgid "Continue" msgstr "" -#: src/game.cpp:1138 +#: src/game.cpp msgid "Change Password" msgstr "" -#: src/game.cpp:1143 +#: src/game.cpp msgid "Sound Volume" msgstr "" -#: src/game.cpp:1145 +#: src/game.cpp msgid "Change Keys" msgstr "" -#: src/game.cpp:1148 +#: src/game.cpp msgid "Exit to Menu" msgstr "" -#: src/game.cpp:1150 +#: src/game.cpp msgid "Exit to OS" msgstr "" -#: src/game.cpp:1827 +#: src/game.cpp msgid "Shutting down..." msgstr "" -#: src/game.cpp:1876 -msgid "Loading..." -msgstr "" - -#: src/game.cpp:1933 +#: src/game.cpp msgid "Creating server..." msgstr "" -#: src/game.cpp:1970 +#: src/game.cpp msgid "Creating client..." msgstr "" -#: src/game.cpp:2143 +#: src/game.cpp msgid "Resolving address..." msgstr "" -#: src/game.cpp:2234 +#: src/game.cpp msgid "Connecting to server..." msgstr "" -#: src/game.cpp:2292 +#: src/game.cpp msgid "Item definitions..." msgstr "" -#: src/game.cpp:2297 +#: src/game.cpp msgid "Node definitions..." msgstr "" -#: src/game.cpp:2304 +#: src/game.cpp msgid "Media..." msgstr "" -#: src/game.cpp:2309 -msgid " KB/s" +#: src/game.cpp +msgid "KiB/s" msgstr "" -#: src/game.cpp:2313 -msgid " MB/s" +#: src/game.cpp +msgid "MiB/s" msgstr "" -#: src/game.cpp:4265 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." msgstr "" -#: src/guiFormSpecMenu.cpp:2799 +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiFormSpecMenu.cpp:2819 +#: src/guiFormSpecMenu.cpp msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:126 +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" -#: src/guiKeyChangeMenu.cpp:166 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "" -#: src/guiKeyChangeMenu.cpp:181 +#: src/guiKeyChangeMenu.cpp msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:297 +#: src/guiKeyChangeMenu.cpp msgid "Key already in use" msgstr "" -#: src/guiKeyChangeMenu.cpp:372 +#: src/guiKeyChangeMenu.cpp msgid "press key" msgstr "" -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp msgid "Forward" msgstr "" -#: src/guiKeyChangeMenu.cpp:399 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "" -#: src/guiKeyChangeMenu.cpp:401 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Right" msgstr "" -#: src/guiKeyChangeMenu.cpp:402 +#: src/guiKeyChangeMenu.cpp msgid "Use" msgstr "" -#: src/guiKeyChangeMenu.cpp:403 +#: src/guiKeyChangeMenu.cpp msgid "Jump" msgstr "" -#: src/guiKeyChangeMenu.cpp:404 +#: src/guiKeyChangeMenu.cpp msgid "Sneak" msgstr "" -#: src/guiKeyChangeMenu.cpp:405 +#: src/guiKeyChangeMenu.cpp msgid "Drop" msgstr "" -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp msgid "Inventory" msgstr "" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "" -#: src/guiKeyChangeMenu.cpp:409 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "" -#: src/guiKeyChangeMenu.cpp:410 +#: src/guiKeyChangeMenu.cpp msgid "Toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:411 +#: src/guiKeyChangeMenu.cpp msgid "Toggle fast" msgstr "" -#: src/guiKeyChangeMenu.cpp:412 +#: src/guiKeyChangeMenu.cpp msgid "Toggle Cinematic" msgstr "" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp msgid "Toggle noclip" msgstr "" -#: src/guiKeyChangeMenu.cpp:414 +#: src/guiKeyChangeMenu.cpp msgid "Range select" msgstr "" -#: src/guiKeyChangeMenu.cpp:415 +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:108 +#: src/guiPasswordChange.cpp msgid "Old Password" msgstr "" -#: src/guiPasswordChange.cpp:124 +#: src/guiPasswordChange.cpp msgid "New Password" msgstr "" -#: src/guiPasswordChange.cpp:139 +#: src/guiPasswordChange.cpp msgid "Confirm Password" msgstr "" -#: src/guiPasswordChange.cpp:155 +#: src/guiPasswordChange.cpp msgid "Change" msgstr "" -#: src/guiPasswordChange.cpp:164 +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" -#: src/guiVolumeChange.cpp:106 +#: src/guiVolumeChange.cpp msgid "Sound Volume: " msgstr "" -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp msgid "Left Button" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp msgid "Middle Button" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp msgid "Right Button" msgstr "" -#: src/keycode.cpp:224 +#: src/keycode.cpp msgid "X Button 1" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp msgid "Back" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp msgid "Clear" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp msgid "Return" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp msgid "Tab" msgstr "" -#: src/keycode.cpp:225 +#: src/keycode.cpp msgid "X Button 2" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp msgid "Capital" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp msgid "Control" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp msgid "Kana" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp msgid "Menu" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp msgid "Pause" msgstr "" -#: src/keycode.cpp:226 +#: src/keycode.cpp msgid "Shift" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp msgid "Convert" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp msgid "Escape" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp msgid "Final" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp msgid "Junja" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp msgid "Kanji" msgstr "" -#: src/keycode.cpp:227 +#: src/keycode.cpp msgid "Nonconvert" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp msgid "End" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp msgid "Home" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp msgid "Mode Change" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp msgid "Next" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp msgid "Prior" msgstr "" -#: src/keycode.cpp:228 +#: src/keycode.cpp msgid "Space" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp msgid "Down" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp msgid "Execute" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp msgid "Print" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp msgid "Select" msgstr "" -#: src/keycode.cpp:229 +#: src/keycode.cpp msgid "Up" msgstr "" -#: src/keycode.cpp:230 +#: src/keycode.cpp msgid "Help" msgstr "" -#: src/keycode.cpp:230 +#: src/keycode.cpp msgid "Insert" msgstr "" -#: src/keycode.cpp:230 +#: src/keycode.cpp msgid "Snapshot" msgstr "" -#: src/keycode.cpp:233 +#: src/keycode.cpp msgid "Left Windows" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Numpad 0" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Numpad 1" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Right Windows" msgstr "" -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Sleep" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp msgid "Numpad 2" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp msgid "Numpad 3" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp msgid "Numpad 4" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp msgid "Numpad 5" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp msgid "Numpad 6" msgstr "" -#: src/keycode.cpp:235 +#: src/keycode.cpp msgid "Numpad 7" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp msgid "Numpad *" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp msgid "Numpad +" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp msgid "Numpad -" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp msgid "Numpad /" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp msgid "Numpad 8" msgstr "" -#: src/keycode.cpp:236 +#: src/keycode.cpp msgid "Numpad 9" msgstr "" -#: src/keycode.cpp:240 +#: src/keycode.cpp msgid "Num Lock" msgstr "" -#: src/keycode.cpp:240 +#: src/keycode.cpp msgid "Scroll Lock" msgstr "" -#: src/keycode.cpp:241 +#: src/keycode.cpp msgid "Left Shift" msgstr "" -#: src/keycode.cpp:241 +#: src/keycode.cpp msgid "Right Shift" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp msgid "Left Control" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp msgid "Left Menu" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp msgid "Right Control" msgstr "" -#: src/keycode.cpp:242 +#: src/keycode.cpp msgid "Right Menu" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp msgid "Comma" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp msgid "Minus" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp msgid "Period" msgstr "" -#: src/keycode.cpp:244 +#: src/keycode.cpp msgid "Plus" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "CrSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "ExSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "Zoom" msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double tap jump for fly" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double-tapping the jump key toggles fly mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If disabled " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Forward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Backward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Left key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Right key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jump key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneak key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Command key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Range select key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cinematic mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect to external media server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-Game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect glass" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooth lighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mipmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Preload inventory textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion Scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving leaves" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Texture path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables minimap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Menus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds in menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server / Singleplayer" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bind address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Damage" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default password" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disable anticheat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu script" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu mod manager" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" diff --git a/po/nb/minetest.po b/po/nb/minetest.po index 438e7e4a..89a1c2da 100644 --- a/po/nb/minetest.po +++ b/po/nb/minetest.po @@ -7,994 +7,3428 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" -"PO-Revision-Date: 2013-06-21 15:48+0200\n" -"Last-Translator: sfan5 \n" -"Language-Team: LANGUAGE \n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-09-20 17:15+0200\n" +"Last-Translator: Christian Haug \n" +"Language-Team: Norwegian Bokmål \n" "Language: nb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 1.4-dev\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" +msgstr "Ok" + +#: builtin/fstk/ui.lua +msgid "Reconnect" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:26 -#, fuzzy -msgid "World:" -msgstr "Navnet på verdenen" - -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -#, fuzzy -msgid "Hide Game" -msgstr "Spill" - -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Cancel" +msgstr "Avbryt" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Depends:" msgstr "Avhenger av:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Lagre" - -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 -msgid "Cancel" -msgstr "Avbryt" - -#: builtin/mainmenu/dlg_config_world.lua:68 -#, fuzzy -msgid "Enable MP" -msgstr "Aktiver Alle" - -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Disable MP" msgstr "Deaktiver Alle" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "aktivert" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Enable MP" +msgstr "Aktiver Alle" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Enable all" msgstr "Aktiver Alle" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Navnet på verdenen" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Hide Game" msgstr "Spill" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Opprett" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Lagre" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "World:" +msgstr "Navnet på verdenen" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "aktivert" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Opprett" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Spill" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Navnet på verdenen" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "Ja" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Ja" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Nei" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "" -#: builtin/mainmenu/modmgr.lua:366 -msgid "Install Mod: unable to find suitable foldername for modpack $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua +msgid "Close store" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "" + +#: builtin/mainmenu/store.lua msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -msgid "Downloading" -msgstr "" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Navnet på verdenen" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:476 -msgid "Rating" +#: builtin/mainmenu/store.lua +msgid "Unsorted" msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "" -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "" - -#: builtin/mainmenu/store.lua:522 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:530 -msgid "Page $1 of $2" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "" - -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" msgstr "" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Address / Port :" +msgstr "" + +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" msgstr "" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -msgid "Configure" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Creative mode" +msgstr "Opprett" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Damage enabled" +msgstr "aktivert" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" msgstr "" -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" msgstr "" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" msgstr "" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" -msgstr "" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "PvP enabled" +msgstr "aktivert" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "" + +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" +#: builtin/mainmenu/tab_server.lua +msgid "Public" msgstr "" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" msgstr "" -#: builtin/mainmenu/tab_settings.lua:140 -msgid "Fancy Trees" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:142 -msgid "Opaque Water" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:144 -msgid "Connected Glass" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "" -#: builtin/mainmenu/tab_settings.lua:167 -msgid "Reset singleplayer world" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Disabled" +msgstr "Deaktiver Alle" + +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Enabled" +msgstr "aktivert" + +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Games" +msgstr "Spill" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 -msgid "Bumpmapping" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Select path" msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -msgid "Start Singleplayer" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "" -#: src/client.cpp:2726 +#: src/client.cpp +msgid "Connection timed out." +msgstr "" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp msgid "Item textures..." msgstr "" -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +msgid "Loading textures..." +msgstr "" + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "" - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." msgstr "" -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +msgid "Change Keys" +msgstr "" + +#: src/game.cpp +msgid "Change Password" +msgstr "" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "" + +#: src/game.cpp +msgid "Continue" +msgstr "" + +#: src/game.cpp +msgid "Creating client..." +msgstr "" + +#: src/game.cpp +msgid "Creating server..." +msgstr "" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "" + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "" + +#: src/game.cpp +msgid "Respawn" +msgstr "" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "" + +#: src/game.cpp +msgid "You died." +msgstr "Du døde." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +#: src/guiFormSpecMenu.cpp +msgid "ok" msgstr "" -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 -msgid "Left" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "" - -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "" -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" msgstr "" -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" msgstr "" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" +#: src/guiKeyChangeMenu.cpp +msgid "Forward" msgstr "" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" msgstr "" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "" + +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" msgstr "" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" msgstr "" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" msgstr "" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "" - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "" -#: src/keycode.cpp:224 -msgid "Left Button" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " msgstr "" -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "" + +#: src/keycode.cpp +msgid "Capital" +msgstr "" + +#: src/keycode.cpp +msgid "Clear" +msgstr "" + +#: src/keycode.cpp +msgid "Comma" +msgstr "" + +#: src/keycode.cpp +msgid "Control" +msgstr "" + +#: src/keycode.cpp +msgid "Convert" +msgstr "" + +#: src/keycode.cpp msgid "CrSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "" + +#: src/keycode.cpp +msgid "End" +msgstr "" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "" + +#: src/keycode.cpp msgid "ExSel" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "" + +#: src/keycode.cpp +msgid "Final" +msgstr "" + +#: src/keycode.cpp +msgid "Help" +msgstr "" + +#: src/keycode.cpp +msgid "Home" +msgstr "" + +#: src/keycode.cpp +msgid "Insert" +msgstr "" + +#: src/keycode.cpp +msgid "Junja" +msgstr "" + +#: src/keycode.cpp +msgid "Kana" +msgstr "" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "" + +#: src/keycode.cpp +msgid "Minus" +msgstr "" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "" + +#: src/keycode.cpp +msgid "Next" +msgstr "" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "" + +#: src/keycode.cpp +msgid "Period" +msgstr "" + +#: src/keycode.cpp +msgid "Plus" +msgstr "" + +#: src/keycode.cpp +msgid "Print" +msgstr "" + +#: src/keycode.cpp +msgid "Prior" +msgstr "" + +#: src/keycode.cpp +msgid "Return" +msgstr "" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "" + +#: src/keycode.cpp +msgid "Select" +msgstr "" + +#: src/keycode.cpp +msgid "Shift" +msgstr "" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "" + +#: src/keycode.cpp +msgid "Space" +msgstr "" + +#: src/keycode.cpp +msgid "Tab" +msgstr "" + +#: src/keycode.cpp +msgid "Up" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "" + +#: src/keycode.cpp msgid "Zoom" msgstr "" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." msgstr "" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "3D clouds" msgstr "" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" +#: src/settings_translation_file.cpp +msgid "3D mode" msgstr "" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." msgstr "" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." msgstr "" -#: src/main.cpp:1953 -msgid "Invalid gamespec." +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." msgstr "" -#~ msgid "is required by:" -#~ msgstr "trengs av:" +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" -#~ msgid "Configuration saved. " -#~ msgstr "Konfigurasjon lagret. " +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Advarsel: Noen konfigurerte modifikasjoner mangler. \n" -#~ "Instillingene deres vil bli fjernet når du lagrer konfigurasjonen." +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Backward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bind address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chat toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Opprett" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Opprett" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Clouds in menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Command key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect glass" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connect to external media server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Console key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Controls" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "aktivert" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default password" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disable anticheat" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double tap jump for fly" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Double-tapping the jump key toggles fly mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Aktiver Alle" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Forward key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Deaktiver Alle" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "aktivert" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Spill" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Inventory key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jump key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Left key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu mod manager" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu script" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen debug" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Menus" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mipmapping" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion Scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Preload inventory textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Range select key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Right key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server / Singleplayer" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server address" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Server port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Serverlist file" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooth lighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sneak key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Texture path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trilinear filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Volume" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving leaves" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#, fuzzy +#~ msgid "Game Name" +#~ msgstr "Spill" #~ msgid "" #~ "Warning: Some mods are not configured yet.\n" @@ -1003,13 +3437,15 @@ msgstr "" #~ "Advarsel: Noen modifikasjoner er ikke konfigurert enda. \n" #~ "De vil bli aktivert som standard når du lagrer konfigurasjonen." -#~ msgid "You died." -#~ msgstr "Du døde." +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Advarsel: Noen konfigurerte modifikasjoner mangler. \n" +#~ "Instillingene deres vil bli fjernet når du lagrer konfigurasjonen." -#, fuzzy -#~ msgid "Games" -#~ msgstr "Spill" +#~ msgid "Configuration saved. " +#~ msgstr "Konfigurasjon lagret. " -#, fuzzy -#~ msgid "Game Name" -#~ msgstr "Spill" +#~ msgid "is required by:" +#~ msgstr "trengs av:" diff --git a/po/nl/minetest.po b/po/nl/minetest.po index c81353d4..5ffb1c6c 100644 --- a/po/nl/minetest.po +++ b/po/nl/minetest.po @@ -7,543 +7,600 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" -"PO-Revision-Date: 2014-01-05 11:31+0200\n" -"Last-Translator: b p \n" -"Language-Team: \n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-09-06 07:40+0200\n" +"Last-Translator: E. Kastelijn \n" +"Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 1.7-dev\n" +"X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "Er is een fout opgetreden in een Lua script, zoals een mod:" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "Er is een fout opgetreden:" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Hoofdmenu" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Ok" -#: builtin/mainmenu/dlg_config_world.lua:26 -msgid "World:" -msgstr "Wereld:" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Verbinden" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -msgid "Hide Game" -msgstr "Geen std" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" -msgstr "Verberg mp mods" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Bezig met laden..." -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" -msgstr "Mod:" +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 -msgid "Depends:" -msgstr "Afhankelijkheden:" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Bewaar" +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" +"Probeer de publieke serverlijst opnieuw in te schakelen en controleer de " +"internet verbinding." + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "Annuleer" -#: builtin/mainmenu/dlg_config_world.lua:68 -msgid "Enable MP" -msgstr "MP inschakelen" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Afhankelijkheden:" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "MP uitschakelen" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "ingeschakeld" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "MP inschakelen" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Alles aan" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Naam wereld" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "kiemgetal" - -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Kaartgenerator" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Spel" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Maak aan" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Geen std" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Verberg mp mods" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod:" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Bewaar" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Wereld:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "ingeschakeld" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Wereld \"$1\" bestaat al" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Maak aan" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Download een sub-game, zoals minetest_game, van minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Download er een van minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Spel" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Kaartgenerator" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Geen wereldnaam opgegeven of geen spel geselecteerd" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "kiemgetal" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" +"Waarschuwing: De minimale ontwikkel test is bedoeld voor ontwikkelaars." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Naam wereld" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Je heb geen sub-spellen geïnstalleerd." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Weet je zeker dat je \"$1\" wilt verwijderen?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "Ja" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Natuurlijk niet!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: kan \"$1\" niet verwijderen" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: onjuist pad \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Natuurlijk niet!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Ja" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Verwijder wereld \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Nee" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Modverzameling hernoemen:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Accepteren" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" -msgstr "Mod installeren: bestand: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Modverzameling hernoemen:" -#: builtin/mainmenu/modmgr.lua:343 -#, fuzzy +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" "\n" -"Mod installeren: niet ondersteund bestandstype \"$1\"" +"Mod installeren: niet ondersteund bestandstype \"$1\" of defect archief" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Installeren van $1 in $2 is mislukt" -#: builtin/mainmenu/modmgr.lua:366 -msgid "Install Mod: unable to find suitable foldername for modpack $1" -msgstr "Mod installeren: kan geen geschikte map vinden voor modverzameling $1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Mod installeren: bestand: \"$1\"" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "Mod installeren: kan geen echte modnaam vinden voor: $1" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" +msgstr "Mod installeren: kan geen geschikte map vinden voor modverzameling $1" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 -msgid "Search" -msgstr "" +#: builtin/mainmenu/store.lua +msgid "Close store" +msgstr "Winkel sluiten" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Downloaden" +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "$1 aan het downloaden, even wachten..." -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:163 -#, fuzzy -msgid "Shortname:" -msgstr "Naam wereld" - -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 -msgid "Rating" -msgstr "Rang" - -#: builtin/mainmenu/store.lua:501 -msgid "re-Install" -msgstr "opnieuw installeren" - -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua msgid "Install" msgstr "Installeren" -#: builtin/mainmenu/store.lua:522 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "Pagina $1 van $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Credits" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Rang" -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "Hoofdontwikkelaars" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Zoeken" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Korte naam:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Succesvol geïnstalleerd:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Ongesorteerd" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "opnieuw installeren" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Actieve bijdragers" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Hoofdontwikkelaars" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Credits" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Vroegere bijdragers" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Eerdere hoofdontwikkelaars" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Geïnstalleerde Mods:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Online mod opslagplaats" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Geen mod beschrijving aanwezig" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Mod beschrijving:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Hernoemen" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Geselecteerde modpack deinstalleren" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Geselecteerde mod deinstalleren" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Selecteer Modbestand:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "Mods" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" -msgstr "IP-Adres/Poort" +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Geen mod beschrijving aanwezig" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Naam/Wachtwoord" +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Hernoemen" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Publieke Serverlijst" +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Selecteer Modbestand:" -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Verwijderen" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Geselecteerde mod deinstalleren" -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Verbinden" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Geselecteerde modpack deinstalleren" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Address / Port :" +msgstr "IP-Adres / Poort :" + +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "Client" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Nieuw" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Verbinden" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "Creatieve Modus" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Schade ingeschakeld" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Verwijderen" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Naam / Wachtwoord :" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Publieke Serverlijst" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "PvP ingeschakeld" + +#: builtin/mainmenu/tab_server.lua +msgid "Bind Address" +msgstr "Adres" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Configure" msgstr "Instellingen" -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Start Server" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Selecteer Wereld:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Creative Mode" msgstr "Creatieve Modus" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Enable Damage" msgstr "Schade inschakelen" -#: builtin/mainmenu/tab_server.lua:35 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Naam/Wachtwoord" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Nieuw" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "Geen wereldnaam opgegeven of geen spel geselecteerd!" + +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "Poort" + +#: builtin/mainmenu/tab_server.lua msgid "Public" msgstr "Publiek" -#: builtin/mainmenu/tab_server.lua:45 -msgid "Bind Address" -msgstr "" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Selecteer Wereld:" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Serverpoort" - -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Server" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Serverpoort" + +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Start Server" + +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" -msgstr "Mooie verlichting" - -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" -msgstr "Deeltjes aanzetten" - -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" -msgstr "3D wolken" - -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Mooie bomen" - -#: builtin/mainmenu/tab_settings.lua:142 -msgid "Opaque Water" -msgstr "Ondoorzichtig water" - -#: builtin/mainmenu/tab_settings.lua:144 -#, fuzzy -msgid "Connected Glass" -msgstr "Verbinden" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-Mapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Anisotrope Filtering" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Bi-Lineaire Filtering" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Tri-Lineare Filtering" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "Shaders" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Toetsen" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Reset singleplayer world" -msgstr "Singleplayer" +msgid "Disabled" +msgstr "MP uitschakelen" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Bumpmapping" -msgstr "Mip-Mapping" +msgid "Enabled" +msgstr "ingeschakeld" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +msgid "Games" +msgstr "Spellen" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Om schaduwen mogelijk te maken moet OpenGL worden gebruikt." +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Selecteren" + +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Instellingen" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Singleplayer" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 -#, fuzzy +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" -msgstr "Instellingen" +msgstr "Mods configureren" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Hoofdmenu" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Start Singleplayer" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Speel" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Singleplayer" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Selecteer textuurverzameling:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Geen informatie aanwezig" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Selecteer textuurverzameling:" + +#: builtin/mainmenu/tab_texturepacks.lua #, fuzzy msgid "Texturepacks" msgstr "Texturen" -#: src/client.cpp:2726 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Fout bij verbinden (time out?)" + +#: src/client.cpp +msgid "Done!" +msgstr "Klaar!" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Nodes initialiseren" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Nodes initialiseren..." + +#: src/client.cpp msgid "Item textures..." msgstr "Voorwerp texturen..." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +msgid "Loading textures..." +msgstr "Bezig met laden van texturen..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Herbouwen van shaders..." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "Fout bij verbinden (time out?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Kan niet de game laden of vinden \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Onjuiste gamespec." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Hoofdmenu" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Geen wereld en adres geselecteerd. Niks te doen." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Spelernaam te lang." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "Het gespecificeerde wereld-pad bestaat niet: " + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "Herspawnen" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "Voorwerpdefinities..." - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "Node definities..." - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "Media..." - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." @@ -551,499 +608,2998 @@ msgstr "" "\n" "Lees debug.txt voor details." -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +msgid "Change Keys" +msgstr "Toetsen aanpassen" + +#: src/game.cpp +msgid "Change Password" +msgstr "Verander wachtwoord" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Verbinding met de server wordt gemaakt..." + +#: src/game.cpp +msgid "Continue" +msgstr "Verder spelen" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Bezig client te maken..." + +#: src/game.cpp +msgid "Creating server..." +msgstr "Aanmaken van server..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Standaard toetsen:\n" +"- W,A,S,D: bewegen\n" +"- Spatie: spring/klim\n" +"- Shift: kruip/duik\n" +"- Q: weggooien\n" +"- I: rugzak\n" +"- Muis: draaien/kijken\n" +"- L.muisknop: graaf/sla\n" +"- R.muisknop: plaats/gebruik\n" +"- Muiswiel: selecteer\n" +"- T: chat\n" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "Terug naar menu" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "Afsluiten" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "Voorwerpdefinities..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "KiB/s" + +#: src/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "MiB/s" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "Node definities..." + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Doorgaan" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "IP-adres opzoeken..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Herspawnen" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Uitschakelen..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Volume" + +#: src/game.cpp +msgid "You died." +msgstr "Je bent gestorven." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "ok" + +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Gebruiken\" = Omlaag" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Achteruit" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Chatten" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Opdracht" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Console" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "2x \"springen\" om te vliegen" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Weggooien" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Vooruit" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Rugzak" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Springen" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Toets is al in gebruik" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Sneltoetsen. (Als dit menu stuk gaat, verwijder dan instellingen uit " "minetest.conf)." -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Gebruiken\" = Omlaag" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "2x \"springen\" om te vliegen" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "Toets is al in gebruik" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "druk op" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "Vooruit" - -#: src/guiKeyChangeMenu.cpp:398 -msgid "Backward" -msgstr "Achteruit" - -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Links" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Rechts" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Gebruiken" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Springen" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "Kruipen" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "Weggooien" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "Rugzak" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Chat" -msgstr "Chatten" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Command" -msgstr "Opdracht" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Console" -msgstr "Console" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "Vliegen aan/uit" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "Snel bewegen aan/uit" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "Noclip aan/uit" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "Range instellen" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Print stacks" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" -msgstr "Huidig wachtwoord" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Range instellen" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" -msgstr "Nieuw wachtwoord" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Rechts" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" -msgstr "Herhaal wachtwoord" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Kruipen" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Snel bewegen aan/uit" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Snel bewegen aan/uit" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Vliegen aan/uit" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Noclip aan/uit" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Gebruiken" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "druk op" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Veranderen" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Herhaal wachtwoord" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Nieuw wachtwoord" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Huidig wachtwoord" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Wachtwoorden zijn niet gelijk!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "Volume: " - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Terug" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Linkermuisknop" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Volume: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Muiswielknop" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Rechtmuisknop" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "X knop 1" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "Terug" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "Wissen" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "Terug" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "X knop 2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Kapitaal" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Menu" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Pauze" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "Converteren" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Escape" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "Modus veranderen" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Volgende" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Eerste" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Spatie" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Omlaag" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Uitvoeren" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Print" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Selecteren" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Omhoog" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Help" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "Screenshot" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "Linker Windowstoets" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "Menu" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "Rechter Windowstoets" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Slaapknop" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Numpad *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Linker Shift" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Rechter Shift" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Linker Ctrl" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Linker Menu" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Rechter Ctrl" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Rechter Menu" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Komma" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "Min" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "Punt" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Plus" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "SAK" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "Terug" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Kapitaal" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Wissen" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Komma" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Converteren" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "Omlaag" + +#: src/keycode.cpp +msgid "End" +msgstr "Einde" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Erase EOF" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "Uitvoeren" + +#: src/keycode.cpp +msgid "Final" +msgstr "Laatste" + +#: src/keycode.cpp +msgid "Help" +msgstr "Help" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Linkermuisknop" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Linker Ctrl" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Linker Menu" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Linker Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Linker Windowstoets" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menu" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Muiswielknop" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Min" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Modus veranderen" + +#: src/keycode.cpp +msgid "Next" +msgstr "Volgende" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numpad *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numpad +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numpad -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numpad /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pauze" + +#: src/keycode.cpp +msgid "Period" +msgstr "Punt" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plus" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Eerste" + +#: src/keycode.cpp +msgid "Return" +msgstr "Terug" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Rechtmuisknop" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Rechter Ctrl" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Rechter Menu" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Rechter Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Rechter Windowstoets" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Selecteren" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Slaapknop" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Screenshot" + +#: src/keycode.cpp +msgid "Space" +msgstr "Spatie" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Omhoog" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X knop 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X knop 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "3D wolken" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "Geavanceerd" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Anisotrope Filtering" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Achteruit" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Bi-Lineaire Filtering" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Adres" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Build inside player" +msgstr "Multiplayer" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "Bumpmapping" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Toetsen" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Toetsen" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Creatieve Modus" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Creatieve Modus" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "3D wolken" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" msgstr "Hoofdmenu" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "Colored fog" msgstr "" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Fout bij verbinden (time out?)" - -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Geen wereld en adres geselecteerd. Niks te doen." - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Kan niet de game laden of vinden \"" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Opdracht" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Onjuiste gamespec." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Verbonden glas" -#~ msgid "Left click: Move all items, Right click: Move single item" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Verbinding met de server wordt gemaakt..." + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Console" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Console" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Console" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Control" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Schade inschakelen" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default game" +msgstr "spel aanpassen" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Nieuw wachtwoord" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Deeltjes aanzetten" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "2x \"springen\" om te vliegen" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "2x \"springen\" om te vliegen" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "Online mod opslagplaats" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Schade inschakelen" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "needs_fallback_font" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Geen filter" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Vooruit" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "GUI scaling filter" +msgstr "GUI schaal-factor" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "MP uitschakelen" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "ingeschakeld" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Spel" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Rugzak" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Springen" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Linker Menu" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Hoofdmenu" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Hoofdmenu" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Kaartgenerator" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Kaartgenerator" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Kaartgenerator" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Kaartgenerator" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Kaartgenerator" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Kaartgenerator" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Menu" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Mip-Mapping" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Node highlighting" +msgstr "Node markering" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "Parallax occlusie" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion" +msgstr "Parallax occlusie" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion Scale" +msgstr "Parallax occlusie" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion bias" +msgstr "Parallax occlusie" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion iterations" +msgstr "Parallax occlusie" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion mode" +msgstr "Parallax occlusie" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion strength" +msgstr "Parallax occlusie" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Player name" +msgstr "Spelernaam te lang." + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Bezig met laden van texturen..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Range instellen" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Rechter Menu" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Screenshot" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Start Singleplayer" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Serverpoort" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "Serverpoort" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Serverpoort" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Publieke Serverlijst" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Publieke Serverlijst" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Shaders" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Mooie verlichting" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Kruipen" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Texturen" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Tri-Lineare Filtering" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "druk op" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Eerdere hoofdontwikkelaars" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Volume" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Walking speed" +msgstr "Bewegende bladeren" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving Nodes" +msgstr "Bewegende bladeren" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Bewegende bladeren" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving plants" +msgstr "Bewegende planten" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water" +msgstr "Golvend water" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water height" +msgstr "Golvend water" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water length" +msgstr "Golvend water" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water speed" +msgstr "Golvend water" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Rendering:" +#~ msgstr "Rendering:" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Herstart minetest om de driver te activeren" + +#~ msgid "Game Name" +#~ msgstr "Spel" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Kan mod \"$1\" niet naar spel \"$2\" kopiëren" + +#~ msgid "GAMES" +#~ msgstr "SPELLEN" + +#~ msgid "Mods:" +#~ msgstr "Mods:" + +#~ msgid "new game" +#~ msgstr "nieuw spel" + +#~ msgid "EDIT GAME" +#~ msgstr "SPEL AANPASSEN" + +#~ msgid "Remove selected mod" +#~ msgstr "Geselecteerde mod verwijderen" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Mod toevoegen" + +#~ msgid "CLIENT" +#~ msgstr "CLIENT" + +#~ msgid "Favorites:" +#~ msgstr "Favorieten:" + +#~ msgid "START SERVER" +#~ msgstr "START SERVER" + +#~ msgid "Name" +#~ msgstr "Naam" + +#~ msgid "Password" +#~ msgstr "Wachtwoord" + +#~ msgid "SETTINGS" +#~ msgstr "INSTELLINGEN" + +#~ msgid "Preload item visuals" +#~ msgstr "Voorwerpen vooraf laden" + +#~ msgid "Finite Liquid" +#~ msgstr "Eindige vloeistoffen" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "SINGLEPLAYER" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "TEXTUREN" + +#~ msgid "MODS" +#~ msgstr "MODS" + +#~ msgid "Add mod:" +#~ msgstr "Mod toevoegen:" + +#~ msgid "Local install" +#~ msgstr "Plaatselijk installeren" + +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " #~ msgstr "" -#~ "Linkermuisknop: Verplaats alle items. Rechtermuisknop: Verplaats één item" +#~ "Let op: Nog niet alle mods zijn geconfigueerd. \n" +#~ "De mods zullen automatisch worden ingeschakeld als je de configuratie " +#~ "bewaard. " -#~ msgid "is required by:" -#~ msgstr "is benodigd voor:" - -#~ msgid "Configuration saved. " -#~ msgstr "Instellingen bewaard. " - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Waarschuwing: Instellingen niet consistent. " - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Kan geen nieuwe wereld aanmaken: de naam bevat onjuiste tekens" - -#~ msgid "Multiplayer" -#~ msgstr "Multiplayer" - -#~ msgid "Advanced" -#~ msgstr "Geavanceerd" - -#~ msgid "Show Public" -#~ msgstr "Publieke server" - -#~ msgid "Show Favorites" -#~ msgstr "Favourieten" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Laat het adres leeg om een lokale server te starten." - -#~ msgid "Create world" -#~ msgstr "Maak wereld aan" - -#~ msgid "Address required." -#~ msgstr "IP-adres nodig." - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Kan niets verwijderen: Geen wereld geselecteerd" - -#~ msgid "Files to be deleted" -#~ msgstr "Deze bestanden worden verwijderd" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Kan geen wereld aanmaken: Geen games gevonden" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Kan instellingen niet aanpassen: Niets geselecteerd" - -#~ msgid "Failed to delete all world files" -#~ msgstr "Niet alle bestanden zijn verwijderd" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "LEt op: Sommige ingestelde mods zijn vermist.\n" +#~ "Hun instellingen worden verwijderd als je de configuratie opslaat. " #~ msgid "" #~ "Default Controls:\n" @@ -1070,147 +3626,91 @@ msgstr "Onjuiste gamespec." #~ "- ESC: Menu\n" #~ "- T: Chat\n" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " +#~ msgid "Failed to delete all world files" +#~ msgstr "Niet alle bestanden zijn verwijderd" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Kan instellingen niet aanpassen: Niets geselecteerd" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Kan geen wereld aanmaken: Geen games gevonden" + +#~ msgid "Files to be deleted" +#~ msgstr "Deze bestanden worden verwijderd" + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Kan niets verwijderen: Geen wereld geselecteerd" + +#~ msgid "Address required." +#~ msgstr "IP-adres nodig." + +#~ msgid "Create world" +#~ msgstr "Maak wereld aan" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Laat het adres leeg om een lokale server te starten." + +#~ msgid "Show Favorites" +#~ msgstr "Favourieten" + +#~ msgid "Show Public" +#~ msgstr "Publieke server" + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Kan geen nieuwe wereld aanmaken: de naam bevat onjuiste tekens" + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Waarschuwing: Instellingen niet consistent. " + +#~ msgid "Configuration saved. " +#~ msgstr "Instellingen bewaard. " + +#~ msgid "is required by:" +#~ msgstr "is benodigd voor:" + +#~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" -#~ "LEt op: Sommige ingestelde mods zijn vermist.\n" -#~ "Hun instellingen worden verwijderd als je de configuratie opslaat. " +#~ "Linkermuisknop: Verplaats alle items. Rechtermuisknop: Verplaats één item" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Let op: Nog niet alle mods zijn geconfigueerd. \n" -#~ "De mods zullen automatisch worden ingeschakeld als je de configuratie " -#~ "bewaard. " +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "Downloaden" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Standaard toetsen:\n" -#~ "- W,A,S,D: bewegen\n" -#~ "- Spatie: spring/klim\n" -#~ "- Shift: kruip/duik\n" -#~ "- Q: weggooien\n" -#~ "- I: rugzak\n" -#~ "- Muis: draaien/kijken\n" -#~ "- L.muisknop: graaf/sla\n" -#~ "- R.muisknop: plaats/gebruik\n" -#~ "- Muiswiel: selecteer\n" -#~ "- T: chat\n" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Om schaduwen mogelijk te maken moet OpenGL worden gebruikt." -#~ msgid "Exit to OS" -#~ msgstr "Afsluiten" +#~ msgid "Texturing:" +#~ msgstr "Textuur:" -#~ msgid "Exit to Menu" -#~ msgstr "Terug naar menu" +#~ msgid "Simple Leaves" +#~ msgstr "Eenvoudige bladeren" -#~ msgid "Sound Volume" -#~ msgstr "Volume" +#~ msgid "Scaling factor applied to menu elements: " +#~ msgstr "Schaal-factor toegepast op menu elementen: " -#~ msgid "Change Password" -#~ msgstr "Verander wachtwoord" +#~ msgid "Reset singleplayer world" +#~ msgstr "Reset Singleplayer wereld" -#~ msgid "Continue" -#~ msgstr "Verder spelen" +#~ msgid "Opaque Water" +#~ msgstr "Ondoorzichtig water" -#~ msgid "You died." -#~ msgstr "Je bent gestorven." +#~ msgid "Opaque Leaves" +#~ msgstr "Ondoorzichtige bladeren" -#~ msgid "Shutting down stuff..." -#~ msgstr "Stopzetten..." +#~ msgid "No!!!" +#~ msgstr "Nee!!!" -#~ msgid "Connecting to server..." -#~ msgstr "Verbinding met de server wordt gemaakt..." +#~ msgid "No Mipmap" +#~ msgstr "Geen Mipmap" -#~ msgid "Resolving address..." -#~ msgstr "IP-adres opzoeken..." +#~ msgid "Mipmap + Aniso. Filter" +#~ msgstr "Mipmap + Anisotropisch filteren" -#~ msgid "Creating client..." -#~ msgstr "Bezig client te maken..." +#~ msgid "Mipmap" +#~ msgstr "Mipmap" -#~ msgid "Creating server...." -#~ msgstr "Bezig server te maken..." +#~ msgid "Fancy Leaves" +#~ msgstr "Mooie bladeren" -#~ msgid "Loading..." -#~ msgstr "Bezig met laden..." - -#~ msgid "Local install" -#~ msgstr "Plaatselijk installeren" - -#~ msgid "Add mod:" -#~ msgstr "Mod toevoegen:" - -#~ msgid "MODS" -#~ msgstr "MODS" - -#~ msgid "TEXTURE PACKS" -#~ msgstr "TEXTUREN" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "SINGLEPLAYER" - -#~ msgid "Finite Liquid" -#~ msgstr "Eindige vloeistoffen" - -#~ msgid "Preload item visuals" -#~ msgstr "Voorwerpen vooraf laden" - -#~ msgid "SETTINGS" -#~ msgstr "INSTELLINGEN" - -#~ msgid "Password" -#~ msgstr "Wachtwoord" - -#~ msgid "Name" -#~ msgstr "Naam" - -#~ msgid "START SERVER" -#~ msgstr "START SERVER" - -#~ msgid "Favorites:" -#~ msgstr "Favorieten:" - -#~ msgid "CLIENT" -#~ msgstr "CLIENT" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Mod toevoegen" - -#~ msgid "Remove selected mod" -#~ msgstr "Geselecteerde mod verwijderen" - -#~ msgid "EDIT GAME" -#~ msgstr "SPEL AANPASSEN" - -#~ msgid "new game" -#~ msgstr "nieuw spel" - -#~ msgid "edit game" -#~ msgstr "spel aanpassen" - -#~ msgid "Mods:" -#~ msgstr "Mods:" - -#~ msgid "Games" -#~ msgstr "Spellen" - -#~ msgid "GAMES" -#~ msgstr "SPELLEN" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Kan mod \"$1\" niet naar spel \"$2\" kopiëren" - -#~ msgid "Game Name" -#~ msgstr "Spel" +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr "Weet je zeker dat je je wereld wilt resetten?" diff --git a/po/pl/minetest.po b/po/pl/minetest.po index c49c340c..672f9a21 100644 --- a/po/pl/minetest.po +++ b/po/pl/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" "PO-Revision-Date: 2013-10-08 21:22+0200\n" "Last-Translator: Maciej Kasatkin \n" "Language-Team: Polish <>\n" @@ -19,149 +19,196 @@ msgstr "" "|| n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Menu główne" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "OK" -#: builtin/mainmenu/dlg_config_world.lua:26 -msgid "World:" -msgstr "Świat:" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Połącz" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -msgid "Hide Game" -msgstr "Ukryj Grę" - -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" -msgstr "Mod:" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Ładowanie..." -#: builtin/mainmenu/dlg_config_world.lua:48 -msgid "Depends:" -msgstr "Zależy od:" +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Zapisz" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "Anuluj" -#: builtin/mainmenu/dlg_config_world.lua:68 -#, fuzzy -msgid "Enable MP" -msgstr "Włącz wszystkie" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Zależy od:" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Disable MP" msgstr "Wyłącz wszystkie" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "włączone" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Enable MP" +msgstr "Włącz wszystkie" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Włącz wszystkie" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Nazwa świata" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Generator mapy" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Ukryj Grę" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Gra" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Utwórz" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod:" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Zapisz" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Świat:" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "włączone" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Istnieje już świat o nazwie \"$1\"" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Utwórz" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Gra" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Generator mapy" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Nie podano nazwy świata lub nie wybrano gry" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Nazwa świata" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Na pewno usunąć \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "Tak" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Oczywiście, że nie!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: nie można usunąć \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: nieprawidłowy katalog \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Oczywiście, że nie!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Tak" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Usunąć świat \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Nie" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Zmień nazwe Paczki Modów:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Accept" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" -msgstr "Zainstaluj mod: plik: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Zmień nazwe Paczki Modów:" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "" "\n" @@ -170,387 +217,406 @@ msgstr "" "\n" "Instalacja moda: nieznany typ pliku \"$1\"" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Instalacja $1 do $2 nie powiodła się" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Zainstaluj mod: plik: \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Instalacja moda: nie można znaleźć nazwy moda $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Instalacja moda: nie można znaleźć odpowiedniego folderu dla paczki modów $1" -#: builtin/mainmenu/modmgr.lua:386 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Instalacja moda: nie można znaleźć nazwy moda $1" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/store.lua +msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Instaluj" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "Strona $1 z $2" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Ocena" + +#: builtin/mainmenu/store.lua msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Ściągnij" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Nazwa świata" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:476 -msgid "Rating" -msgstr "Ocena" +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "Ponowna instalacja" -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "Instaluj" - -#: builtin/mainmenu/store.lua:522 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:530 -msgid "Page $1 of $2" -msgstr "Strona $1 z $2" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Autorzy" - -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "Twórcy" - -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Aktywni współautorzy" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Twórcy" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Autorzy" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Byli współautorzy" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +#, fuzzy +msgid "Previous Core Developers" +msgstr "Twórcy" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Zainstalowane Mody:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -#, fuzzy -msgid "No mod description available" -msgstr "Brak informacjii" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Mod information:" msgstr "Brak informacjii" -#: builtin/mainmenu/tab_mods.lua:93 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua +msgid "Mods" +msgstr "Mody" + +#: builtin/mainmenu/tab_mods.lua +#, fuzzy +msgid "No mod description available" +msgstr "Brak informacjii" + +#: builtin/mainmenu/tab_mods.lua msgid "Rename" msgstr "Zmień nazwę" -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "" +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Wybierz plik moda:" -#: builtin/mainmenu/tab_mods.lua:106 +#: builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Uninstall selected mod" msgstr "Usuń zaznaczony mod" -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Wybierz plik moda:" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "" -#: builtin/mainmenu/tab_mods.lua:165 -msgid "Mods" -msgstr "Mody" - -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Address / Port :" msgstr "Adres/Port" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Nazwa gracza/Hasło" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Lista publicznych serwerów" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Usuń" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Połącz" - -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "Klient" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Nowy" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Połącz" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -msgid "Configure" -msgstr "Ustaw" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Rozpocznij grę/Połącz" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Wybierz świat:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Creative mode" msgstr "Tryb kreatywny" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" -msgstr "Włącz obrażenia" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Damage enabled" +msgstr "włączone" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Publiczne" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Usuń" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Nazwa gracza/Hasło" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Lista publicznych serwerów" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "PvP enabled" +msgstr "włączone" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Ustaw" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Tryb kreatywny" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Włącz obrażenia" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nazwa gracza/Hasło" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Nowy" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +#, fuzzy +msgid "No world created or selected!" +msgstr "Nie podano nazwy świata lub nie wybrano gry" + +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Port Serwera" +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Publiczne" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Wybierz świat:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Serwer" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Port Serwera" + +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Rozpocznij grę/Połącz" + +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" -msgstr "Płynne oświetlenie" - -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" -msgstr "Włącz cząstki" - -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" -msgstr "Chmury 3D" - -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Ozdobne drzewa" - -#: builtin/mainmenu/tab_settings.lua:142 -msgid "Opaque Water" -msgstr "Nieprzeźroczysta woda" - -#: builtin/mainmenu/tab_settings.lua:144 -#, fuzzy -msgid "Connected Glass" -msgstr "Połącz" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-Mappowanie" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Filtrowanie anizotropowe" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Filtrowanie dwuliniowe" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Filtrowanie trójliniowe" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "Shadery" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Zmień klawisze" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Reset singleplayer world" -msgstr "Pojedynczy gracz" +msgid "Disabled" +msgstr "Wyłącz wszystkie" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Bumpmapping" -msgstr "Mip-Mappowanie" +msgid "Enabled" +msgstr "włączone" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +msgid "Games" +msgstr "Gry" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Select" + +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Ustawienia" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Pojedynczy gracz" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Ustaw" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Menu główne" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Pojedynczy gracz" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Graj" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Pojedynczy gracz" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Wybierz paczkę tekstur:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Brak informacjii" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Wybierz paczkę tekstur:" + +#: builtin/mainmenu/tab_texturepacks.lua #, fuzzy msgid "Texturepacks" msgstr "Paczki tekstur" -#: src/client.cpp:2726 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Błąd połączenia (brak odpowiedzi?)" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp msgid "Item textures..." msgstr "Tekstury przedmiotów..." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +#, fuzzy +msgid "Loading textures..." +msgstr "Ładowanie..." + +#: src/client.cpp +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Sprawdzanie adresu..." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "Błąd połączenia (brak odpowiedzi?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Nie można znaleźć lub wczytać trybu gry \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Nieprawidłowa specyfikacja trybu gry." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menu główne" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Nie wybrano świata ani adresu." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "Wróć do gry" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "Definicje przedmiotów..." - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "Definicje nod..." - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "Media..." - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." @@ -558,500 +624,2979 @@ msgstr "" "\n" "Sprawdź plik debug.txt by uzyskać więcej informacji." -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Zmień klawisze" + +#: src/game.cpp +msgid "Change Password" +msgstr "Zmień hasło" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Łączenie z serwerem..." + +#: src/game.cpp +msgid "Continue" +msgstr "Dalej" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Tworzenie klienta..." + +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "Tworzenie serwera...." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Domyślne sterowanie:↵\n" +"- WASD: ruch↵\n" +"- Spacja: skok/wspinanie się↵\n" +"- Shift: skradanie się/schodzenie w dół↵\n" +"- Q: upuszczenie przedmiotu↵\n" +"- I: ekwipunek↵\n" +"- Mysz: obracanie się/patrzenie↵\n" +"- Lewy przycisk myszy: kopanie/uderzanie↵\n" +"- Prawy przycisk myszy: postawienie/użycie przedmiotu↵\n" +"- Rolka myszy: wybór przedmiotu↵\n" +"- T: chat\n" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "Wyjście do menu" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "Wyjście z gry" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "Definicje przedmiotów..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "Definicje nod..." + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Kontynuuj" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "Sprawdzanie adresu..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Wróć do gry" + +#: src/game.cpp +#, fuzzy +msgid "Shutting down..." +msgstr "Wyłączanie..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Głośność" + +#: src/game.cpp +msgid "You died." +msgstr "Zginąłeś." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Użyj\" = wspinaj się" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Tył" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Czat" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Komenda" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Konsola" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Wciśnij dwukrotnie \"Skok\" by włączyć tryb latania" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Upuść" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Przód" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Ekwipunek" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Skok" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Klawisz już zdefiniowany" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Zdefiniowane klawisze. (Jeżeli to menu nie działa, usuń skonfigurowane " "klawisze z pliku minetest.conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Użyj\" = wspinaj się" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Wciśnij dwukrotnie \"Skok\" by włączyć tryb latania" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "Klawisz już zdefiniowany" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "naciśnij klawisz" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "Przód" - -#: src/guiKeyChangeMenu.cpp:398 -msgid "Backward" -msgstr "Tył" - -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Lewo" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Prawo" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Użyj" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Skok" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "Skradanie" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "Upuść" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "Ekwipunek" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Chat" -msgstr "Czat" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Command" -msgstr "Komenda" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Console" -msgstr "Konsola" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "Przełącz tryb latania" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "Przełącz tryb szybki" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "Przełącz tryb noclip" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "Zasięg widzenia" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Drukuj stosy" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" -msgstr "Stare hasło" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Zasięg widzenia" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" -msgstr "Nowe hasło" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Prawo" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" -msgstr "Potwierdź hasło" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Skradanie" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Przełącz tryb szybki" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Przełącz tryb szybki" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Przełącz tryb latania" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Przełącz tryb noclip" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Użyj" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "naciśnij klawisz" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Zmień" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Potwierdź hasło" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Nowe hasło" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Stare hasło" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Hasła nie są jednakowe!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "Głośność: " - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Wyjście" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Lewy przycisk myszy" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Głośność: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Środkowy przycisk myszy" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Prawy przycisk myszy" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "X Button 1" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "Backspace" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "Delete" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "Enter" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "X Button 2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Caps Lock" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Menu" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Pause" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "Convert" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Escape" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "Mode Change" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Next" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Prior" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Spacja" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Dół" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Execute" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Print" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Select" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Góra" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Pomoc" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "Snapshot" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "Lewy Windows" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "Apps" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "Prawy Windows" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Sleep" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Numpad *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Lewy Shift" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Prawy Shift" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Lewy Control" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Lewy Menu" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Prawy Control" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Prawy Menu" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Przecinek" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "Minus" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "Kropka" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Plus" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "Backspace" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Caps Lock" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Delete" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Przecinek" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convert" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "Dół" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "Execute" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Pomoc" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Lewy przycisk myszy" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Lewy Control" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Lewy Menu" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Lewy Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Lewy Windows" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menu" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Środkowy przycisk myszy" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Minus" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Mode Change" + +#: src/keycode.cpp +msgid "Next" +msgstr "Next" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numpad *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numpad +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numpad -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numpad /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Clear" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pause" + +#: src/keycode.cpp +msgid "Period" +msgstr "Kropka" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plus" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Prior" + +#: src/keycode.cpp +msgid "Return" +msgstr "Enter" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Prawy przycisk myszy" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Prawy Control" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Prawy Menu" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Prawy Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Prawy Windows" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Select" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Sleep" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Snapshot" + +#: src/keycode.cpp +msgid "Space" +msgstr "Spacja" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Góra" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X Button 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X Button 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "Chmury 3D" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "Zaawansowane" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Filtrowanie anizotropowe" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Tył" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Filtrowanie dwuliniowe" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Sprawdzanie adresu..." + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Build inside player" +msgstr "Gra wieloosobowa" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bumpmapping" +msgstr "Mip-Mappowanie" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Zmień klawisze" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Zmień klawisze" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Tryb kreatywny" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Tryb kreatywny" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "Chmury 3D" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" msgstr "Menu główne" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "Colored fog" msgstr "" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Błąd połączenia (brak odpowiedzi?)" - -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Nie wybrano świata ani adresu." - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Nie można znaleźć lub wczytać trybu gry \"" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Komenda" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Nieprawidłowa specyfikacja trybu gry." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Połącz" -#~ msgid "Left click: Move all items, Right click: Move single item" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Łączenie z serwerem..." + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Konsola" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Konsola" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Konsola" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Control" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Włącz obrażenia" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default game" +msgstr "edytuj grę" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Nowe hasło" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Włącz cząstki" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "Wciśnij dwukrotnie \"Skok\" by włączyć tryb latania" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "Wciśnij dwukrotnie \"Skok\" by włączyć tryb latania" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Włącz obrażenia" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Filtrowanie anizotropowe" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Przód" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Wyłącz wszystkie" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "włączone" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Gra" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Ekwipunek" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Skok" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Lewy Menu" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Menu główne" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Menu główne" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Generator mapy" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Generator mapy" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Generator mapy" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Generator mapy" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Generator mapy" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Generator mapy" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Menu" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Mip-Mappowanie" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion Scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Ładowanie..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Zasięg widzenia" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Prawy Menu" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Snapshot" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Pojedynczy gracz" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Serwer" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Port Serwera" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "Port Serwera" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Serwer" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Port Serwera" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Lista publicznych serwerów" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Lista publicznych serwerów" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Shadery" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Płynne oświetlenie" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Skradanie" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Paczki tekstur" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Filtrowanie trójliniowe" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "naciśnij klawisz" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Twórcy" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Głośność" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Ozdobne drzewa" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Game Name" +#~ msgstr "Nazwa Gry" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Kopiowanie moda \"$1\" do gry \"$2\" nie powiodło się" + +#~ msgid "GAMES" +#~ msgstr "GRY" + +#~ msgid "Mods:" +#~ msgstr "Mody:" + +#~ msgid "new game" +#~ msgstr "nowa gra" + +#~ msgid "EDIT GAME" +#~ msgstr "EDYTUJ GRĘ" + +#~ msgid "Remove selected mod" +#~ msgstr "Usuń zaznaczony mod" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<--Dodaj mod" + +#~ msgid "CLIENT" +#~ msgstr "KLIENT" + +#~ msgid "Favorites:" +#~ msgstr "Ulubione:" + +#~ msgid "START SERVER" +#~ msgstr "URUCHOM SERWER" + +#~ msgid "Name" +#~ msgstr "Nazwa" + +#~ msgid "Password" +#~ msgstr "Hasło" + +#~ msgid "SETTINGS" +#~ msgstr "USTAWIENIA" + +#~ msgid "Preload item visuals" +#~ msgstr "Ładuj obrazy przedmiotów" + +#~ msgid "Finite Liquid" +#~ msgstr "Realistyczne ciecze" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "TRYB JEDNOOSOBOWY" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "PACZKI TEKSTUR" + +#~ msgid "MODS" +#~ msgstr "MODY" + +#, fuzzy +#~ msgid "Add mod:" +#~ msgstr "<<--Dodaj mod" + +#, fuzzy +#~ msgid "Local install" +#~ msgstr "Instaluj" + +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " #~ msgstr "" -#~ "Lewy przycisk myszy: przenieś wszystkie przedmioty, Prawy przycisk myszy: " -#~ "przenieś pojedynczy przedmiot" +#~ "Uwaga: Niektóre z modyfikacji nie zostały jeszcze skonfigurowane.\n" +#~ "Zostaną domyślnie włączone gdy zapiszesz konfigurację. " -#~ msgid "is required by:" -#~ msgstr "wymagane przez:" - -#~ msgid "Configuration saved. " -#~ msgstr "Konfiguracja zapisana. " - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Ostrzeżenie: Plik konfiguracyjny niespójny. " - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Nie można stworzyć świata: Nazwa zawiera niedozwolone znaki" - -#~ msgid "Multiplayer" -#~ msgstr "Gra wieloosobowa" - -#~ msgid "Advanced" -#~ msgstr "Zaawansowane" - -#~ msgid "Show Public" -#~ msgstr "Pokaż publiczne" - -#~ msgid "Show Favorites" -#~ msgstr "Pokaż ulubione" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Pozostaw pole adresu puste, by uruchomić serwer lokalny." - -#~ msgid "Create world" -#~ msgstr "Stwórz świat" - -#~ msgid "Address required." -#~ msgstr "Wymagany adres." - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Nie można skasować świata: nic nie zaznaczono" - -#~ msgid "Files to be deleted" -#~ msgstr "Pliki do skasowania" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Nie można utworzyć świata: Nie znaleziono żadnego trybu gry" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Nie można skonfigurować świata: Nic nie zaznaczono" - -#~ msgid "Failed to delete all world files" -#~ msgstr "Nie udało się skasować wszystkich plików świata" +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Ostrzeżenie: Niektóre z modyfikacji nie zostały znalezione.\n" +#~ "Ich ustawienia zostaną usunięte gdy zapiszesz konfigurację. " #~ msgid "" #~ "Default Controls:\n" @@ -1078,148 +3623,64 @@ msgstr "Nieprawidłowa specyfikacja trybu gry." #~ "- ESC: to menu\n" #~ "- T: czat\n" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " +#~ msgid "Failed to delete all world files" +#~ msgstr "Nie udało się skasować wszystkich plików świata" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Nie można skonfigurować świata: Nic nie zaznaczono" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Nie można utworzyć świata: Nie znaleziono żadnego trybu gry" + +#~ msgid "Files to be deleted" +#~ msgstr "Pliki do skasowania" + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Nie można skasować świata: nic nie zaznaczono" + +#~ msgid "Address required." +#~ msgstr "Wymagany adres." + +#~ msgid "Create world" +#~ msgstr "Stwórz świat" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Pozostaw pole adresu puste, by uruchomić serwer lokalny." + +#~ msgid "Show Favorites" +#~ msgstr "Pokaż ulubione" + +#~ msgid "Show Public" +#~ msgstr "Pokaż publiczne" + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Nie można stworzyć świata: Nazwa zawiera niedozwolone znaki" + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Ostrzeżenie: Plik konfiguracyjny niespójny. " + +#~ msgid "Configuration saved. " +#~ msgstr "Konfiguracja zapisana. " + +#~ msgid "is required by:" +#~ msgstr "wymagane przez:" + +#~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" -#~ "Ostrzeżenie: Niektóre z modyfikacji nie zostały znalezione.\n" -#~ "Ich ustawienia zostaną usunięte gdy zapiszesz konfigurację. " - -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Uwaga: Niektóre z modyfikacji nie zostały jeszcze skonfigurowane.\n" -#~ "Zostaną domyślnie włączone gdy zapiszesz konfigurację. " - -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Domyślne sterowanie:↵\n" -#~ "- WASD: ruch↵\n" -#~ "- Spacja: skok/wspinanie się↵\n" -#~ "- Shift: skradanie się/schodzenie w dół↵\n" -#~ "- Q: upuszczenie przedmiotu↵\n" -#~ "- I: ekwipunek↵\n" -#~ "- Mysz: obracanie się/patrzenie↵\n" -#~ "- Lewy przycisk myszy: kopanie/uderzanie↵\n" -#~ "- Prawy przycisk myszy: postawienie/użycie przedmiotu↵\n" -#~ "- Rolka myszy: wybór przedmiotu↵\n" -#~ "- T: chat\n" - -#~ msgid "Exit to OS" -#~ msgstr "Wyjście z gry" - -#~ msgid "Exit to Menu" -#~ msgstr "Wyjście do menu" - -#~ msgid "Sound Volume" -#~ msgstr "Głośność" - -#~ msgid "Change Password" -#~ msgstr "Zmień hasło" - -#~ msgid "Continue" -#~ msgstr "Dalej" - -#~ msgid "You died." -#~ msgstr "Zginąłeś." - -#~ msgid "Shutting down stuff..." -#~ msgstr "Wyłączanie..." - -#~ msgid "Connecting to server..." -#~ msgstr "Łączenie z serwerem..." - -#~ msgid "Resolving address..." -#~ msgstr "Sprawdzanie adresu..." - -#~ msgid "Creating client..." -#~ msgstr "Tworzenie klienta..." - -#~ msgid "Creating server...." -#~ msgstr "Tworzenie serwera...." - -#~ msgid "Loading..." -#~ msgstr "Ładowanie..." +#~ "Lewy przycisk myszy: przenieś wszystkie przedmioty, Prawy przycisk myszy: " +#~ "przenieś pojedynczy przedmiot" #, fuzzy -#~ msgid "Local install" -#~ msgstr "Instaluj" +#~ msgid "Downloading" +#~ msgstr "Ściągnij" #, fuzzy -#~ msgid "Add mod:" -#~ msgstr "<<--Dodaj mod" +#~ msgid "Reset singleplayer world" +#~ msgstr "Pojedynczy gracz" -#~ msgid "MODS" -#~ msgstr "MODY" +#~ msgid "Opaque Water" +#~ msgstr "Nieprzeźroczysta woda" -#~ msgid "TEXTURE PACKS" -#~ msgstr "PACZKI TEKSTUR" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "TRYB JEDNOOSOBOWY" - -#~ msgid "Finite Liquid" -#~ msgstr "Realistyczne ciecze" - -#~ msgid "Preload item visuals" -#~ msgstr "Ładuj obrazy przedmiotów" - -#~ msgid "SETTINGS" -#~ msgstr "USTAWIENIA" - -#~ msgid "Password" -#~ msgstr "Hasło" - -#~ msgid "Name" -#~ msgstr "Nazwa" - -#~ msgid "START SERVER" -#~ msgstr "URUCHOM SERWER" - -#~ msgid "Favorites:" -#~ msgstr "Ulubione:" - -#~ msgid "CLIENT" -#~ msgstr "KLIENT" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<--Dodaj mod" - -#~ msgid "Remove selected mod" -#~ msgstr "Usuń zaznaczony mod" - -#~ msgid "EDIT GAME" -#~ msgstr "EDYTUJ GRĘ" - -#~ msgid "new game" -#~ msgstr "nowa gra" - -#~ msgid "edit game" -#~ msgstr "edytuj grę" - -#~ msgid "Mods:" -#~ msgstr "Mody:" - -#~ msgid "Games" -#~ msgstr "Gry" - -#~ msgid "GAMES" -#~ msgstr "GRY" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Kopiowanie moda \"$1\" do gry \"$2\" nie powiodło się" - -#~ msgid "Game Name" -#~ msgstr "Nazwa Gry" +#, fuzzy +#~ msgid "Opaque Leaves" +#~ msgstr "Nieprzeźroczysta woda" diff --git a/po/pt/minetest.po b/po/pt/minetest.po index 24680e2d..037aa80f 100644 --- a/po/pt/minetest.po +++ b/po/pt/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" "PO-Revision-Date: 2014-01-06 01:45+0200\n" "Last-Translator: João Farias \n" "Language-Team: LANGUAGE \n" @@ -18,150 +18,197 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Menu Principal" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Ok" -#: builtin/mainmenu/dlg_config_world.lua:26 -msgid "World:" -msgstr "Mundo:" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Ligar" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -msgid "Hide Game" -msgstr "Esconder Jogo" - -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" -msgstr "Extra:" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "A carregar..." -#: builtin/mainmenu/dlg_config_world.lua:48 -msgid "Depends:" -msgstr "Depende de:" +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Guardar" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "Cancelar" -#: builtin/mainmenu/dlg_config_world.lua:68 -#, fuzzy -msgid "Enable MP" -msgstr "Ativar Tudo" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Depende de:" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Disable MP" msgstr "Desativar Tudo" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "ativo" +#: builtin/mainmenu/dlg_config_world.lua +#, fuzzy +msgid "Enable MP" +msgstr "Ativar Tudo" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua #, fuzzy msgid "Enable all" msgstr "Ativar Tudo" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Nome do Mundo" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Geração de Mapa" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Esconder Jogo" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Jogo" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Criar" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Extra:" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Guardar" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Mundo:" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "ativo" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "O mundo com o nome \"$1\" já existe" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Criar" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Jogo" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Geração de Mapa" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Mundo sem nome ou nenhum jogo selecionado" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Nome do Mundo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Tem a certeza que pertende eliminar \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "Sim" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Não, é claro que não!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Mensagem de Extra: falhou a eliminação de \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Mensagem de extra: caminho inválido \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Não, é claro que não!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Sim" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Eliminar Mundo \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Não" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Renomear Pacote de Extras:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Aceitar" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" -msgstr "Instalar Extra: ficheiro: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Renomear Pacote de Extras:" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "" "\n" @@ -170,386 +217,406 @@ msgstr "" "\n" "Instalar Extra: tipo de ficheiro desconhecido \"$1\"" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Falha ao instalar de $1 ao $2" -#: builtin/mainmenu/modmgr.lua:366 -msgid "Install Mod: unable to find suitable foldername for modpack $1" -msgstr "" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Instalar Extra: ficheiro: \"$1\"" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua +msgid "Close store" +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Instalar" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "Página $1 de $2" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Classificação" + +#: builtin/mainmenu/store.lua msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Descarregar" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Nome do Mundo" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:476 -msgid "Rating" -msgstr "Classificação" +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "re-Instalar" -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "Instalar" - -#: builtin/mainmenu/store.lua:522 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:530 -msgid "Page $1 of $2" -msgstr "Página $1 de $2" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Créditos" - -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "Desenvolvedores Chave" - -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Contribuintes Ativos" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Desenvolvedores Chave" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Créditos" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Antigos Contribuintes" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +#, fuzzy +msgid "Previous Core Developers" +msgstr "Desenvolvedores Chave" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Extras Instalados:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Repositório Online de Mods" - -#: builtin/mainmenu/tab_mods.lua:78 -#, fuzzy -msgid "No mod description available" -msgstr "Sem informação" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Mod information:" msgstr "Sem informação" -#: builtin/mainmenu/tab_mods.lua:93 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua +msgid "Mods" +msgstr "Extras" + +#: builtin/mainmenu/tab_mods.lua +#, fuzzy +msgid "No mod description available" +msgstr "Sem informação" + +#: builtin/mainmenu/tab_mods.lua msgid "Rename" msgstr "Renomear" -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Desinstalar mode selecionado" +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Seleccionar ficheiro de Extra:" -#: builtin/mainmenu/tab_mods.lua:106 +#: builtin/mainmenu/tab_mods.lua #, fuzzy msgid "Uninstall selected mod" msgstr "Remover extra selecionado" -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Seleccionar ficheiro de Extra:" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Desinstalar mode selecionado" -#: builtin/mainmenu/tab_mods.lua:165 -msgid "Mods" -msgstr "Extras" - -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Address / Port :" msgstr "Endereço/Porta" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Nome/Senha" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Lista de Servidores Públicos" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Eliminar" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Ligar" - -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "Cliente" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Novo" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Ligar" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -msgid "Configure" -msgstr "Configurar" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Jogar" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Seleccionar Mundo:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Creative mode" msgstr "Modo Criativo" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" -msgstr "Ativar Dano" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Damage enabled" +msgstr "ativo" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Público" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Eliminar" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Nome/Senha" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Lista de Servidores Públicos" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "PvP enabled" +msgstr "ativo" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Configurar" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Modo Criativo" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Ativar Dano" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nome/Senha" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Novo" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +#, fuzzy +msgid "No world created or selected!" +msgstr "Mundo sem nome ou nenhum jogo selecionado" + +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Porta" +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Público" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Seleccionar Mundo:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Servidor" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Porta" + +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Jogar" + +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" -msgstr "Iluminação Suave" - -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" -msgstr "Ativar Partículas" - -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" -msgstr "Nuvens 3D" - -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Árvores Melhoradas" - -#: builtin/mainmenu/tab_settings.lua:142 -msgid "Opaque Water" -msgstr "Água Opaca" - -#: builtin/mainmenu/tab_settings.lua:144 -#, fuzzy -msgid "Connected Glass" -msgstr "Ligar" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-Mapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Filtro Anisotrópico" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Filtro Bi-Linear" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Filtro Tri-Linear" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "Sombras" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Mudar teclas" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Reset singleplayer world" -msgstr "Um Jogador" +msgid "Disabled" +msgstr "Desativar Tudo" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Bumpmapping" -msgstr "Mip-Mapping" +msgid "Enabled" +msgstr "ativo" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +msgid "Games" +msgstr "Jogos" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Seleccionar" + +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Definições" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Um Jogador" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Configurar" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Menu Principal" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Um Jogador" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Jogar" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Um Jogador" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Selecione um pacote de texturas:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Sem informação" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Selecione um pacote de texturas:" + +#: builtin/mainmenu/tab_texturepacks.lua #, fuzzy msgid "Texturepacks" msgstr "Pacotes de Texturas" -#: src/client.cpp:2726 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Erro de conexão (excedeu tempo?)" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp msgid "Item textures..." msgstr "Texturas dos items..." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +#, fuzzy +msgid "Loading textures..." +msgstr "A carregar..." + +#: src/client.cpp +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "A resolver endereço..." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "Erro de conexão (excedeu tempo?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Não foi possível encontrar ou carregar jogo \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "gamespec inválido." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menu Principal" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "" +"Nenhum mundo seleccionado e nenhum endereço providenciado. Nada para fazer." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "Reaparecer" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "Definições dos Itens..." - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "Dados..." - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." @@ -557,497 +624,2980 @@ msgstr "" "\n" "Consulte debug.txt para mais detalhes." -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Mudar teclas" + +#: src/game.cpp +msgid "Change Password" +msgstr "Mudar Senha" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "A conectar ao servidor..." + +#: src/game.cpp +msgid "Continue" +msgstr "Continuar" + +#: src/game.cpp +msgid "Creating client..." +msgstr "A criar cliente..." + +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "A criar servidor..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Teclas por defeito:\n" +"- WASD: mover\n" +"- Barra de espaço: saltar/subir\n" +"- Shift: andar cuidadosamente/descer\n" +"- Q: Largar item\n" +"- I: Inventário\n" +"- Rato: virar/olhar\n" +"- Clique esquerdo: cavar/bater\n" +"- Clique direito: colocar/utilizar\n" +"- Roda do rato: seleccionar item\n" +"- T: conversação\n" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "Sair para Menu" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "Sair para o sistema" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "Definições dos Itens..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "Dados..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Continuar" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "A resolver endereço..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Reaparecer" + +#: src/game.cpp +#, fuzzy +msgid "Shutting down..." +msgstr "A desligar..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Volume do som" + +#: src/game.cpp +msgid "You died." +msgstr "Morreste." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "Teclas. (Se este menu se estragar, remova as linhas do minetest.conf)" +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "" -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "\"Use\" = descer" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Carregue duas vezes em \"saltar\" para ativar o vôo" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "Tecla já em uso" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "pressione a tecla" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "Avançar" - -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "Recuar" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 -msgid "Left" -msgstr "Esquerda" - -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Direita" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Usar" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Saltar" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "Agachar" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "Largar" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "Inventário" - -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "Conversa" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "Comando" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "Consola" -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "Ativar/Desativar vôo" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Carregue duas vezes em \"saltar\" para ativar o vôo" -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "Ativar/Desativar correr" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Largar" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "Ativar/Desativar noclip" +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Avançar" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "Seleccionar Distância" +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventário" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Saltar" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Tecla já em uso" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "Teclas. (Se este menu se estragar, remova as linhas do minetest.conf)" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Esquerda" + +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Imprimir stacks" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" -msgstr "Senha antiga" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Seleccionar Distância" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" -msgstr "Senha Nova" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Direita" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" -msgstr "Confirmar Senha" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Agachar" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Ativar/Desativar correr" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Ativar/Desativar correr" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Ativar/Desativar vôo" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Ativar/Desativar noclip" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Usar" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "pressione a tecla" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Mudar" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Confirmar Senha" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Senha Nova" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Senha antiga" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Senhas não correspondem!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "Volume do som: " - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Sair" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Botão Esquerdo" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Volume do som: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Roda do Rato" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Botão Direito" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "Botão X 1" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "Voltar" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "Limpar" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "Enter" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tabulação" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "Botão X 2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Capital" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Menu" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Pausa" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "Converter" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "ESC" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "Nãoconverter" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "Mode Change" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Próximo" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Prévio" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Espaço" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Baixo" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Executar" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Print" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Seleccionar" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Cima" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Ajuda" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "Screenshot" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "WINDOWS Esq." - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "App" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "WINDOWS Dir." - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Suspender" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Numpad *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Shift Esquerdo" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Shift Direito" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Control Esq" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Menu Esquerdo" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Control Direito" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Menu Direito" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Virgula" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "Menos" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "Período" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Mais" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "Attm" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "Voltar" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Capital" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Limpar" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Virgula" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Converter" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "Baixo" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Apagar OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "ESC" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "Executar" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Ajuda" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Botão Esquerdo" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Control Esq" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Menu Esquerdo" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Shift Esquerdo" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "WINDOWS Esq." + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menu" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Roda do Rato" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Menos" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Mode Change" + +#: src/keycode.cpp +msgid "Next" +msgstr "Próximo" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nãoconverter" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numpad *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numpad +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numpad -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numpad /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "Limpar OEM" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "PAL" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pausa" + +#: src/keycode.cpp +msgid "Period" +msgstr "Período" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Mais" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Prévio" + +#: src/keycode.cpp +msgid "Return" +msgstr "Enter" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Botão Direito" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Control Direito" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Menu Direito" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Shift Direito" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "WINDOWS Dir." + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Seleccionar" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Suspender" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Screenshot" + +#: src/keycode.cpp +msgid "Space" +msgstr "Espaço" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tabulação" + +#: src/keycode.cpp +msgid "Up" +msgstr "Cima" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "Botão X 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "Botão X 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "Nuvens 3D" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "Avançado" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Filtro Anisotrópico" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Recuar" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Filtro Bi-Linear" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "A resolver endereço..." + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Build inside player" +msgstr "Vários jogadores" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bumpmapping" +msgstr "Mip-Mapping" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Mudar teclas" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Mudar teclas" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Modo Criativo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Modo Criativo" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "Nuvens 3D" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" msgstr "Menu Principal" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "Colored fog" msgstr "" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Erro de conexão (excedeu tempo?)" - -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "" -"Nenhum mundo seleccionado e nenhum endereço providenciado. Nada para fazer." - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Não foi possível encontrar ou carregar jogo \"" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Comando" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "gamespec inválido." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Ligar" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Botão esq: Mover todos os itens Botão dir: Mover um item" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "A conectar ao servidor..." -#~ msgid "is required by:" -#~ msgstr "é necessário pelo:" +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" -#~ msgid "Configuration saved. " -#~ msgstr "Configuração gravada. " +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Consola" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Atenção: Configuração não compatível. " +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Consola" -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Não foi possível criar mundo: Nome com caracteres inválidos" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Consola" -#~ msgid "Multiplayer" -#~ msgstr "Vários jogadores" +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" -#~ msgid "Advanced" -#~ msgstr "Avançado" +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" -#~ msgid "Show Public" -#~ msgstr "Mostrar Públicos" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Control" -#~ msgid "Show Favorites" -#~ msgstr "Mostrar Favoritos" +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Deixe endereço em branco para iniciar servidor local." +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" -#~ msgid "Create world" -#~ msgstr "Criar mundo" +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" -#~ msgid "Address required." -#~ msgstr "Endereço necessário." +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Não foi possível eliminar mundo: Nada seleccionado" +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" -#~ msgid "Files to be deleted" -#~ msgstr "Ficheiros para eliminar" +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" -#~ msgid "Cannot create world: No games found" -#~ msgstr "Não foi possível criar mundo: Não foram detectados jogos" +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Não foi possível configurar mundo: Nada seleccionado" +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" -#~ msgid "Failed to delete all world files" -#~ msgstr "Falhou a remoção de todos os ficheiros dos mundos" +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Ativar Dano" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default game" +msgstr "editar jogo" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Senha Nova" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Ativar Partículas" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "Carregue duas vezes em \"saltar\" para ativar o vôo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "Carregue duas vezes em \"saltar\" para ativar o vôo" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "Repositório Online de Mods" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Ativar Dano" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Filtro Anisotrópico" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Avançar" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Desativar Tudo" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "ativo" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Jogo" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Inventário" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Saltar" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Menu Esquerdo" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Menu Principal" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Menu Principal" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Geração de Mapa" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Geração de Mapa" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Geração de Mapa" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Geração de Mapa" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Geração de Mapa" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Geração de Mapa" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Menu" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Mip-Mapping" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion Scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "A carregar..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Seleccionar Distância" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Menu Direito" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Screenshot" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Um Jogador" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Servidor" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Porta" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "Porta" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Servidor" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Porta" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Lista de Servidores Públicos" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Lista de Servidores Públicos" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Sombras" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Iluminação Suave" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Agachar" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Pacotes de Texturas" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Filtro Tri-Linear" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "pressione a tecla" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Desenvolvedores Chave" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Volume do som" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Árvores Melhoradas" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Game Name" +#~ msgstr "Nome do Jogo" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "" +#~ "Mensagem de Jogo: Impossível fazer cópia do extra \"$1\" para o jogo " +#~ "\"$2\"" + +#~ msgid "GAMES" +#~ msgstr "JOGOS" + +#~ msgid "Mods:" +#~ msgstr "Extras:" + +#~ msgid "new game" +#~ msgstr "novo jogo" + +#~ msgid "EDIT GAME" +#~ msgstr "EDITAR JOGO" + +#~ msgid "Remove selected mod" +#~ msgstr "Remover extra selecionado" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Adicionar extra" + +#~ msgid "CLIENT" +#~ msgstr "CLIENTE" + +#~ msgid "Favorites:" +#~ msgstr "Favoritos:" + +#~ msgid "START SERVER" +#~ msgstr "INICIAR SERVIDOR" + +#~ msgid "Name" +#~ msgstr "Nome" + +#~ msgid "Password" +#~ msgstr "Senha" + +#~ msgid "SETTINGS" +#~ msgstr "DEFINIÇÕES" + +#~ msgid "Preload item visuals" +#~ msgstr "Pré-carregamento dos itens" + +#~ msgid "Finite Liquid" +#~ msgstr "Líquido Finito" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "Um Jogador" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "PACOTES DE TEXTURAS" + +#~ msgid "MODS" +#~ msgstr "EXTRAS" + +#, fuzzy +#~ msgid "Add mod:" +#~ msgstr "<<-- Adicionar extra" + +#, fuzzy +#~ msgid "Local install" +#~ msgstr "Instalar" + +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Atenção: Alguns mods ainda não estão configurados.\n" +#~ "Eles vão ser ativados por predefinição quando guardar a configuração. " + +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Atenção: Alguns mods configurados estão em falta.\n" +#~ "As suas definições vão ser removidas quando gravar a configuração. " #~ msgid "" #~ "Default Controls:\n" @@ -1074,150 +3624,62 @@ msgstr "gamespec inválido." #~ "- ESC: Este menu\n" #~ "- T: Chat\n" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Atenção: Alguns mods configurados estão em falta.\n" -#~ "As suas definições vão ser removidas quando gravar a configuração. " +#~ msgid "Failed to delete all world files" +#~ msgstr "Falhou a remoção de todos os ficheiros dos mundos" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Atenção: Alguns mods ainda não estão configurados.\n" -#~ "Eles vão ser ativados por predefinição quando guardar a configuração. " +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Não foi possível configurar mundo: Nada seleccionado" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Teclas por defeito:\n" -#~ "- WASD: mover\n" -#~ "- Barra de espaço: saltar/subir\n" -#~ "- Shift: andar cuidadosamente/descer\n" -#~ "- Q: Largar item\n" -#~ "- I: Inventário\n" -#~ "- Rato: virar/olhar\n" -#~ "- Clique esquerdo: cavar/bater\n" -#~ "- Clique direito: colocar/utilizar\n" -#~ "- Roda do rato: seleccionar item\n" -#~ "- T: conversação\n" +#~ msgid "Cannot create world: No games found" +#~ msgstr "Não foi possível criar mundo: Não foram detectados jogos" -#~ msgid "Exit to OS" -#~ msgstr "Sair para o sistema" +#~ msgid "Files to be deleted" +#~ msgstr "Ficheiros para eliminar" -#~ msgid "Exit to Menu" -#~ msgstr "Sair para Menu" +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Não foi possível eliminar mundo: Nada seleccionado" -#~ msgid "Sound Volume" -#~ msgstr "Volume do som" +#~ msgid "Address required." +#~ msgstr "Endereço necessário." -#~ msgid "Change Password" -#~ msgstr "Mudar Senha" +#~ msgid "Create world" +#~ msgstr "Criar mundo" -#~ msgid "Continue" -#~ msgstr "Continuar" +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Deixe endereço em branco para iniciar servidor local." -#~ msgid "You died." -#~ msgstr "Morreste." +#~ msgid "Show Favorites" +#~ msgstr "Mostrar Favoritos" -#~ msgid "Shutting down stuff..." -#~ msgstr "A desligar..." +#~ msgid "Show Public" +#~ msgstr "Mostrar Públicos" -#~ msgid "Connecting to server..." -#~ msgstr "A conectar ao servidor..." +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Não foi possível criar mundo: Nome com caracteres inválidos" -#~ msgid "Resolving address..." -#~ msgstr "A resolver endereço..." +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Atenção: Configuração não compatível. " -#~ msgid "Creating client..." -#~ msgstr "A criar cliente..." +#~ msgid "Configuration saved. " +#~ msgstr "Configuração gravada. " -#~ msgid "Creating server...." -#~ msgstr "A criar servidor..." +#~ msgid "is required by:" +#~ msgstr "é necessário pelo:" -#~ msgid "Loading..." -#~ msgstr "A carregar..." +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Botão esq: Mover todos os itens Botão dir: Mover um item" #, fuzzy -#~ msgid "Local install" -#~ msgstr "Instalar" +#~ msgid "Downloading" +#~ msgstr "Descarregar" #, fuzzy -#~ msgid "Add mod:" -#~ msgstr "<<-- Adicionar extra" - -#~ msgid "MODS" -#~ msgstr "EXTRAS" - -#~ msgid "TEXTURE PACKS" -#~ msgstr "PACOTES DE TEXTURAS" - -#~ msgid "SINGLE PLAYER" +#~ msgid "Reset singleplayer world" #~ msgstr "Um Jogador" -#~ msgid "Finite Liquid" -#~ msgstr "Líquido Finito" +#~ msgid "Opaque Water" +#~ msgstr "Água Opaca" -#~ msgid "Preload item visuals" -#~ msgstr "Pré-carregamento dos itens" - -#~ msgid "SETTINGS" -#~ msgstr "DEFINIÇÕES" - -#~ msgid "Password" -#~ msgstr "Senha" - -#~ msgid "Name" -#~ msgstr "Nome" - -#~ msgid "START SERVER" -#~ msgstr "INICIAR SERVIDOR" - -#~ msgid "Favorites:" -#~ msgstr "Favoritos:" - -#~ msgid "CLIENT" -#~ msgstr "CLIENTE" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Adicionar extra" - -#~ msgid "Remove selected mod" -#~ msgstr "Remover extra selecionado" - -#~ msgid "EDIT GAME" -#~ msgstr "EDITAR JOGO" - -#~ msgid "new game" -#~ msgstr "novo jogo" - -#~ msgid "edit game" -#~ msgstr "editar jogo" - -#~ msgid "Mods:" -#~ msgstr "Extras:" - -#~ msgid "Games" -#~ msgstr "Jogos" - -#~ msgid "GAMES" -#~ msgstr "JOGOS" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "" -#~ "Mensagem de Jogo: Impossível fazer cópia do extra \"$1\" para o jogo " -#~ "\"$2\"" - -#~ msgid "Game Name" -#~ msgstr "Nome do Jogo" +#, fuzzy +#~ msgid "Opaque Leaves" +#~ msgstr "Água Opaca" diff --git a/po/pt_BR/minetest.po b/po/pt_BR/minetest.po index b8b68a66..b5e5f822 100644 --- a/po/pt_BR/minetest.po +++ b/po/pt_BR/minetest.po @@ -7,159 +7,206 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" -"PO-Revision-Date: 2013-11-25 02:13+0200\n" -"Last-Translator: Frederico Guimarães \n" -"Language-Team: LANGUAGE \n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-10-15 04:11+0200\n" +"Last-Translator: Leonardo \n" +"Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 1.7-dev\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 2.5-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "Ocorreu um erro no script Lua, como um mod:" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "Ocorreu um erro:" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "Menu principal" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Ok" -#: builtin/mainmenu/dlg_config_world.lua:26 -msgid "World:" -msgstr "Mundo:" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Conectar" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -msgid "Hide Game" -msgstr "Ocultar jogos" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" -msgstr "Ocultar conteúdo PMs" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Carregando..." -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" -msgstr "Mod:" +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 -msgid "Depends:" -msgstr "Depende de:" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Salvar" +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "Cancelar" -#: builtin/mainmenu/dlg_config_world.lua:68 -msgid "Enable MP" -msgstr "Habilitar PMs" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Depende de:" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Desabilitar PMs" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "habilitado" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Habilitar PMs" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Habilitar todos" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Nome do mundo" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Seed" - -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Mapgen" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Jogo" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Criar" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Ocultar jogos" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Ocultar conteúdo PMs" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod:" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Salvar" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Mundo:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "habilitado" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Já existe um mundo com o nome \"$1\"" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Criar" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Jogo" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Mapgen" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "" "Não foi fornecido nenhum nome para o mundo ou não foi selecionado nenhum jogo" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Seed" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Nome do mundo" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Tem certeza que deseja excluir \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "Sim" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Claro que não!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: não foi possível excluir \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: caminho inválido do módulo \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Claro que não!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Sim" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Excluir o mundo \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Não" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Renomear pacote de módulos:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Aceitar" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" -msgstr "Instalação de módulo: arquivo: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Renomear pacote de módulos:" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "" "\n" @@ -168,386 +215,408 @@ msgstr "" "\n" "Instalação de módulo: o tipo de arquivo \"$1\" não é suportado" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Não foi possível instalar $1 em $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Instalação de módulo: arquivo: \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "" +"Instalação de módulo: não foi possível encontrar o nome real do módulo: $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Instalação de módulo: não foi possível encontrar o nome adequado da pasta " "para o pacote de módulos $1" -#: builtin/mainmenu/modmgr.lua:386 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "" -"Instalação de módulo: não foi possível encontrar o nome real do módulo: $1" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/store.lua +msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Instalar" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "Página $1 de $2" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Classificação" + +#: builtin/mainmenu/store.lua msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Baixar" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Nome do mundo" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:476 -msgid "Rating" -msgstr "Classificação" +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "reinstalar" -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "Instalar" - -#: builtin/mainmenu/store.lua:522 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:530 -msgid "Page $1 of $2" -msgstr "Página $1 de $2" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Créditos" - -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "Desenvolvedores principais" - -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Colaboradores ativos" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Desenvolvedores principais" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Créditos" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Colaboradores anteriores" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +#, fuzzy +msgid "Previous Core Developers" +msgstr "Desenvolvedores principais" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Módulos instalados:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Repositório de módulos online" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Nenhuma descrição disponível do módulo" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Informação do módulo:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Renomear" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Desinstalar o pacote de módulos selecionado" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Desinstalar o módulo selecionado" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Selecione o arquivo do módulo:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "Módulos" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Nenhuma descrição disponível do módulo" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Renomear" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Selecione o arquivo do módulo:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Desinstalar o módulo selecionado" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Desinstalar o pacote de módulos selecionado" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Address / Port :" msgstr "Endereço/Porta" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Nome/Senha" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Servidores públicos" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Excluir" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Conectar" - -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "Cliente" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Novo" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Conectar" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -msgid "Configure" -msgstr "Configurar" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Iniciar o jogo" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Selecione um mundo:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Creative mode" msgstr "Modo criativo" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" -msgstr "Habilitar dano" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Damage enabled" +msgstr "habilitado" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Público" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Excluir" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Nome/Senha" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Servidores públicos" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "PvP enabled" +msgstr "habilitado" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Configurar" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Modo criativo" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Habilitar dano" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nome/Senha" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Novo" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +#, fuzzy +msgid "No world created or selected!" +msgstr "" +"Não foi fornecido nenhum nome para o mundo ou não foi selecionado nenhum jogo" + +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Porta do servidor" +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Público" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Selecione um mundo:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Servidor" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Porta do servidor" + +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Iniciar o jogo" + +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" -msgstr "Iluminação suave" - -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" -msgstr "Habilitar partículas" - -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" -msgstr "Nuvens 3D" - -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Árvores melhores" - -#: builtin/mainmenu/tab_settings.lua:142 -msgid "Opaque Water" -msgstr "Água opaca" - -#: builtin/mainmenu/tab_settings.lua:144 -#, fuzzy -msgid "Connected Glass" -msgstr "Conectar" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mipmapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Filtragem anisotrópica" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Filtragem bi-linear" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Filtragem tri-linear" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "Sombreadores" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Mudar teclas" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Reset singleplayer world" -msgstr "Um jogador" +msgid "Disabled" +msgstr "Desabilitar PMs" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Bumpmapping" -msgstr "Mipmapping" +msgid "Enabled" +msgstr "habilitado" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +msgid "Games" +msgstr "Jogos" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Para habilitar os sombreadores é necessário usar o driver OpenGL." +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Select" + +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Configurações" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Um jogador" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Configurar" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Menu principal" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Um jogador" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Jogar" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Um jogador" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Selecione o pacote de texturas:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Nenhuma informação disponível" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Selecione o pacote de texturas:" + +#: builtin/mainmenu/tab_texturepacks.lua #, fuzzy msgid "Texturepacks" msgstr "Pacotes de texturas" -#: src/client.cpp:2726 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Erro de conexão (tempo excedido?)" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp msgid "Item textures..." msgstr "Texturas dos itens..." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +#, fuzzy +msgid "Loading textures..." +msgstr "Carregando..." + +#: src/client.cpp +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Resolvendo os endereços..." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "Erro de conexão (tempo excedido?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Não foi possível localizar ou carregar jogo \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Especificação do jogo inválida." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Menu principal" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "" +"Nenhum mundo foi selecionado e nenhum endereço fornecido. Não existe nada a " +"ser feito." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "Reviver" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "Definições dos itens..." - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "Definições dos nós..." - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "Mídia..." - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." @@ -555,500 +624,2979 @@ msgstr "" "\n" "Verifique o debug.txt para mais detalhes." -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Mudar teclas" + +#: src/game.cpp +msgid "Change Password" +msgstr "Alterar a senha" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Conectando ao servidor..." + +#: src/game.cpp +msgid "Continue" +msgstr "Continuar" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Criando o cliente..." + +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "Criando o servidor..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Controles padrão:\n" +"- WASD: mover\n" +"- Espaço: pular/escalar\n" +"- Shift: esgueirar/descer\n" +"- Q: descartar o item\n" +"- I: inventário\n" +"- Mouse: virar/olhar\n" +"- Botão esquerdo: cavar/atingir\n" +"- Botão direito: colocar/usar\n" +"- Roda: selecionar item\n" +"- T: bate-papo\n" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "Sair para o menu" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "Sair do Minetest" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "Definições dos itens..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "Mídia..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "Definições dos nós..." + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Continuar" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "Resolvendo os endereços..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Reviver" + +#: src/game.cpp +#, fuzzy +msgid "Shutting down..." +msgstr "Desligando tudo..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Volume do som" + +#: src/game.cpp +msgid "You died." +msgstr "Você morreu." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Usar\" = descer" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Voltar" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Bate-papo" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Comando" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Console" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "\"Pular\" duas vezes ativa o voo" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Soltar" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Avançar" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventário" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Pular" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Essa tecla já está em uso" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Teclas (se este menu estiver com problema, remova itens do arquivo minetest." "conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Usar\" = descer" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "\"Pular\" duas vezes ativa o voo" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "Essa tecla já está em uso" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "press. uma tecla" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "Avançar" - -#: src/guiKeyChangeMenu.cpp:398 -msgid "Backward" -msgstr "Voltar" - -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Esquerda" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Direita" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Usar" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Pular" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "Esgueirar" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "Soltar" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "Inventário" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Chat" -msgstr "Bate-papo" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Command" -msgstr "Comando" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Console" -msgstr "Console" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "Alternar voo" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "Alternar corrida" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "Alternar noclip" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "Sel. distância" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Impr. pilha (log)" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" -msgstr "Senha antiga" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Sel. distância" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" -msgstr "Nova senha" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Direita" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" -msgstr "Confirmar a senha" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Esgueirar" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Alternar corrida" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Alternar corrida" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Alternar voo" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Alternar noclip" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Usar" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "press. uma tecla" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Alterar" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Confirmar a senha" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Nova senha" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Senha antiga" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "As senhas não correspondem!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "Volume do som: " - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Sair" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Botão esquerdo" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Volume do som: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Roda do mouse" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Botão direito" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "Botão X 1" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "Backspace" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "Limpar" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "Enter" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "Botão X 2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Caps Lock" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Ctrl" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Menu" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Pause" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "Convert" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Esc" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "Mode Change" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Page Down" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Page Up" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Espaço" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Abaixo" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Executar" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Print Screen" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Select" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Acima" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Ajuda" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "Captura de tela" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "Windows esq." - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "Apps" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Tecl.num.0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Tecl.num.1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "Windows dir." - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Sleep" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Tecl.num.2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Tecl.num.3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Tecl.num.4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Tecl.num.5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Tecl.num.6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Tecl.num.7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Tecl.num.*" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Tecl.num.+" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Tecl.num.-" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Tecl.num./" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Tecl.num.8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Tecl.num.9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Shift esq." - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Shift dir." - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Ctrl esq." - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Menu esq." - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Ctrl dir." - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Menu dir." - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Vírgula" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "Menos" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "Ponto" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Mais" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "Backspace" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Caps Lock" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Limpar" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Vírgula" + +#: src/keycode.cpp +msgid "Control" +msgstr "Ctrl" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convert" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "Abaixo" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Apagar OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Esc" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "Executar" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Ajuda" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Botão esquerdo" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Ctrl esq." + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Menu esq." + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Shift esq." + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Windows esq." + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menu" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Roda do mouse" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Menos" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Mode Change" + +#: src/keycode.cpp +msgid "Next" +msgstr "Page Down" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Tecl.num.*" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Tecl.num.+" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Tecl.num.-" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Tecl.num./" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Tecl.num.0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Tecl.num.1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Tecl.num.2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Tecl.num.3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Tecl.num.4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Tecl.num.5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Tecl.num.6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Tecl.num.7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Tecl.num.8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Tecl.num.9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "Limpar OEM" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pause" + +#: src/keycode.cpp +msgid "Period" +msgstr "Ponto" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Mais" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print Screen" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Page Up" + +#: src/keycode.cpp +msgid "Return" +msgstr "Enter" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Botão direito" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Ctrl dir." + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Menu dir." + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Shift dir." + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Windows dir." + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Select" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Sleep" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Captura de tela" + +#: src/keycode.cpp +msgid "Space" +msgstr "Espaço" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Acima" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "Botão X 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "Botão X 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Zoom" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "Nuvens 3D" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "Avançado" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Filtragem anisotrópica" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Voltar" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Filtragem bi-linear" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Resolvendo os endereços..." + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Build inside player" +msgstr "Vários jogadores" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bumpmapping" +msgstr "Mipmapping" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Mudar teclas" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Mudar teclas" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Modo criativo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Modo criativo" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "Nuvens 3D" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" msgstr "Menu principal" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "Colored fog" msgstr "" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Erro de conexão (tempo excedido?)" - -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "" -"Nenhum mundo foi selecionado e nenhum endereço fornecido. Não existe nada a " -"ser feito." - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Não foi possível localizar ou carregar jogo \"" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Comando" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Especificação do jogo inválida." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Conectar" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "Botão esquerdo: Move todos os itens. Botão direito: Move um item" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Conectando ao servidor..." -#~ msgid "is required by:" -#~ msgstr "é necessário para:" +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" -#~ msgid "Configuration saved. " -#~ msgstr "A configuração foi salva. " +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Console" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Atenção: A configuração não está consistente." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Console" -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Não foi possível criar o mundo: O nome contém caracteres inválidos" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Console" -#~ msgid "Multiplayer" -#~ msgstr "Vários jogadores" +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" -#~ msgid "Advanced" -#~ msgstr "Avançado" +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" -#~ msgid "Show Public" -#~ msgstr "Exibir públicos" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Ctrl" -#~ msgid "Show Favorites" -#~ msgstr "Exibir favoritos" +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Deixe o endereço em branco para iniciar um servidor local." +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" -#~ msgid "Create world" -#~ msgstr "Criar o mundo" +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" -#~ msgid "Address required." -#~ msgstr "É necessário um endereço." +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Não foi possível excluir o mundo: Nenhum foi selecionado" +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" -#~ msgid "Files to be deleted" -#~ msgstr "Arquivos a serem excluídos" +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" -#~ msgid "Cannot create world: No games found" -#~ msgstr "Não foi possivel criar o mundo: Não foi encontrado nenhum jogo" +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Não foi possível configurar o mundo: Nada foi selecionado" +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" -#~ msgid "Failed to delete all world files" -#~ msgstr "Não foi possível excluir todos os arquivos do mundo" +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Habilitar dano" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default game" +msgstr "editar o jogo" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Nova senha" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Habilitar partículas" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "\"Pular\" duas vezes ativa o voo" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "\"Pular\" duas vezes ativa o voo" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "Repositório de módulos online" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Habilitar dano" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "needs_fallback_font" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Filtragem anisotrópica" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Avançar" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Desabilitar PMs" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "habilitado" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Jogo" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Inventário" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Pular" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Menu esq." + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Menu principal" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Menu principal" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Menu" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Mipmapping" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion Scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Carregando..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Sel. distância" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Menu dir." + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Captura de tela" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Um jogador" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Servidor" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Porta do servidor" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "Porta do servidor" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Servidor" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Porta do servidor" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Servidores públicos" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Servidores públicos" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Sombreadores" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Iluminação suave" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Esgueirar" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Pacotes de texturas" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Filtragem tri-linear" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "press. uma tecla" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Desenvolvedores principais" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Volume do som" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Árvores melhores" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Game Name" +#~ msgstr "Nome do jogo" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Não foi possível copiar o mod \"$1\" para o jogo \"$2\"" + +#~ msgid "GAMES" +#~ msgstr "JOGOS" + +#~ msgid "Mods:" +#~ msgstr "Módulos:" + +#~ msgid "new game" +#~ msgstr "novo jogo" + +#~ msgid "EDIT GAME" +#~ msgstr "EDITAR JOGO" + +#~ msgid "Remove selected mod" +#~ msgstr "Remover o módulo selecionado" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Adicionar módulo" + +#~ msgid "CLIENT" +#~ msgstr "CLIENTE" + +#~ msgid "Favorites:" +#~ msgstr "Favoritos:" + +#~ msgid "START SERVER" +#~ msgstr "SERVIDOR" + +#~ msgid "Name" +#~ msgstr "Nome" + +#~ msgid "Password" +#~ msgstr "Senha" + +#~ msgid "SETTINGS" +#~ msgstr "CONFIGURAÇÕES" + +#~ msgid "Preload item visuals" +#~ msgstr "Precarga de elementos visuais" + +#~ msgid "Finite Liquid" +#~ msgstr "Líquido finito" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "UM JOGADOR" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "TEXTURAS" + +#~ msgid "MODS" +#~ msgstr "MÓDULOS" + +#~ msgid "Add mod:" +#~ msgstr "Adicionar módulo:" + +#~ msgid "Local install" +#~ msgstr "Instalação local" + +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Atenção: Alguns mods ainda não foram configurados.\n" +#~ "E eles serão ativados por padrão, quando você salvar a configuração." + +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Atenção: Alguns mods configurados não foram encontrados.\n" +#~ "Suas definições serão removidas quando você salvar a configuração." #~ msgid "" #~ "Default Controls:\n" @@ -1075,146 +3623,65 @@ msgstr "Especificação do jogo inválida." #~ "- ESC: este menu\n" #~ "- T: bate-papo\n" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Atenção: Alguns mods configurados não foram encontrados.\n" -#~ "Suas definições serão removidas quando você salvar a configuração." +#~ msgid "Failed to delete all world files" +#~ msgstr "Não foi possível excluir todos os arquivos do mundo" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Atenção: Alguns mods ainda não foram configurados.\n" -#~ "E eles serão ativados por padrão, quando você salvar a configuração." +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Não foi possível configurar o mundo: Nada foi selecionado" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Controles padrão:\n" -#~ "- WASD: mover\n" -#~ "- Espaço: pular/escalar\n" -#~ "- Shift: esgueirar/descer\n" -#~ "- Q: descartar o item\n" -#~ "- I: inventário\n" -#~ "- Mouse: virar/olhar\n" -#~ "- Botão esquerdo: cavar/atingir\n" -#~ "- Botão direito: colocar/usar\n" -#~ "- Roda: selecionar item\n" -#~ "- T: bate-papo\n" +#~ msgid "Cannot create world: No games found" +#~ msgstr "Não foi possivel criar o mundo: Não foi encontrado nenhum jogo" -#~ msgid "Exit to OS" -#~ msgstr "Sair do Minetest" +#~ msgid "Files to be deleted" +#~ msgstr "Arquivos a serem excluídos" -#~ msgid "Exit to Menu" -#~ msgstr "Sair para o menu" +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Não foi possível excluir o mundo: Nenhum foi selecionado" -#~ msgid "Sound Volume" -#~ msgstr "Volume do som" +#~ msgid "Address required." +#~ msgstr "É necessário um endereço." -#~ msgid "Change Password" -#~ msgstr "Alterar a senha" +#~ msgid "Create world" +#~ msgstr "Criar o mundo" -#~ msgid "Continue" -#~ msgstr "Continuar" +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Deixe o endereço em branco para iniciar um servidor local." -#~ msgid "You died." -#~ msgstr "Você morreu." +#~ msgid "Show Favorites" +#~ msgstr "Exibir favoritos" -#~ msgid "Shutting down stuff..." -#~ msgstr "Desligando tudo..." +#~ msgid "Show Public" +#~ msgstr "Exibir públicos" -#~ msgid "Connecting to server..." -#~ msgstr "Conectando ao servidor..." +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Não foi possível criar o mundo: O nome contém caracteres inválidos" -#~ msgid "Resolving address..." -#~ msgstr "Resolvendo os endereços..." +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Atenção: A configuração não está consistente." -#~ msgid "Creating client..." -#~ msgstr "Criando o cliente..." +#~ msgid "Configuration saved. " +#~ msgstr "A configuração foi salva. " -#~ msgid "Creating server...." -#~ msgstr "Criando o servidor..." +#~ msgid "is required by:" +#~ msgstr "é necessário para:" -#~ msgid "Loading..." -#~ msgstr "Carregando..." +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "Botão esquerdo: Move todos os itens. Botão direito: Move um item" -#~ msgid "Local install" -#~ msgstr "Instalação local" +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "Baixar" -#~ msgid "Add mod:" -#~ msgstr "Adicionar módulo:" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Para habilitar os sombreadores é necessário usar o driver OpenGL." -#~ msgid "MODS" -#~ msgstr "MÓDULOS" +#, fuzzy +#~ msgid "Reset singleplayer world" +#~ msgstr "Um jogador" -#~ msgid "TEXTURE PACKS" -#~ msgstr "TEXTURAS" +#~ msgid "Opaque Water" +#~ msgstr "Água opaca" -#~ msgid "SINGLE PLAYER" -#~ msgstr "UM JOGADOR" - -#~ msgid "Finite Liquid" -#~ msgstr "Líquido finito" - -#~ msgid "Preload item visuals" -#~ msgstr "Precarga de elementos visuais" - -#~ msgid "SETTINGS" -#~ msgstr "CONFIGURAÇÕES" - -#~ msgid "Password" -#~ msgstr "Senha" - -#~ msgid "Name" -#~ msgstr "Nome" - -#~ msgid "START SERVER" -#~ msgstr "SERVIDOR" - -#~ msgid "Favorites:" -#~ msgstr "Favoritos:" - -#~ msgid "CLIENT" -#~ msgstr "CLIENTE" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Adicionar módulo" - -#~ msgid "Remove selected mod" -#~ msgstr "Remover o módulo selecionado" - -#~ msgid "EDIT GAME" -#~ msgstr "EDITAR JOGO" - -#~ msgid "new game" -#~ msgstr "novo jogo" - -#~ msgid "edit game" -#~ msgstr "editar o jogo" - -#~ msgid "Mods:" -#~ msgstr "Módulos:" - -#~ msgid "Games" -#~ msgstr "Jogos" - -#~ msgid "GAMES" -#~ msgstr "JOGOS" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Não foi possível copiar o mod \"$1\" para o jogo \"$2\"" - -#~ msgid "Game Name" -#~ msgstr "Nome do jogo" +#, fuzzy +#~ msgid "Opaque Leaves" +#~ msgstr "Água opaca" diff --git a/po/ro/minetest.po b/po/ro/minetest.po index eefdd5f2..66dc1885 100644 --- a/po/ro/minetest.po +++ b/po/ro/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" "PO-Revision-Date: 2013-12-18 21:44+0200\n" "Last-Translator: King Artur \n" "Language-Team: LANGUAGE \n" @@ -19,147 +19,194 @@ msgstr "" "20)) ? 1 : 2;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Meniul Principal" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Ok" -#: builtin/mainmenu/dlg_config_world.lua:26 -msgid "World:" -msgstr "Lume:" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Conectează" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -msgid "Hide Game" -msgstr "Ascunde Joc" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" -msgstr "Ascunde conținutul mp" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Se încarcă..." -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" -msgstr "Mod:" +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 -msgid "Depends:" -msgstr "Dependințe:" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Salvează" +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "Anulează" -#: builtin/mainmenu/dlg_config_world.lua:68 -msgid "Enable MP" -msgstr "Activează MP" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Dependințe:" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Dezactivează MP" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "activat" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Activează MP" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Activează tot" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Numele lumii" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Seminţe" - -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Mapgen" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Joc" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Creează" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Ascunde Joc" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Ascunde conținutul mp" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod:" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Salvează" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Lume:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "activat" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "O lume cu numele \"$1\" deja există" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Creează" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Joc" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Mapgen" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Jocul nu are nume, sau nu ai selectat un joc" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Seminţe" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Numele lumii" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Ești sigur că vrei să ștergi \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "Da" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Nu, sigur că nu!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: Eroare la ștergerea \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: Pacht de mod invalid \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Nu, sigur că nu!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Da" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Ștergi lumea \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Nu" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Redenumiți Pachetul de moduri:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Acceptă" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" -msgstr "Instalare Mod: fișier: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Redenumiți Pachetul de moduri:" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "" "\n" @@ -168,385 +215,404 @@ msgstr "" "\n" "Instalare Mod: tip de fișier neacceptat \"$1\"" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "Eșuare la instalarea $1 în $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Instalare Mod: fișier: \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Instalare mod: nu se poate găsi numele real pentru: $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Instalare Mod: nu se poate găsi nume de folder potrivit pentru pachetul de " "mod $1" -#: builtin/mainmenu/modmgr.lua:386 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Instalare mod: nu se poate găsi numele real pentru: $1" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" +#: builtin/mainmenu/store.lua +msgid "Close store" msgstr "" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Instalează" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "Pagina $1 din $2" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Notă" + +#: builtin/mainmenu/store.lua msgid "Search" msgstr "" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Descarcă" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "Numele lumii" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" msgstr "" -#: builtin/mainmenu/store.lua:476 -msgid "Rating" -msgstr "Notă" +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "Reinstalează" -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "Instalează" - -#: builtin/mainmenu/store.lua:522 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:530 -msgid "Page $1 of $2" -msgstr "Pagina $1 din $2" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Credits" - -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "Dezvoltatori de bază" - -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Contribuitori activi" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Dezvoltatori de bază" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Credits" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Foști contribuitori" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +#, fuzzy +msgid "Previous Core Developers" +msgstr "Dezvoltatori de bază" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Moduri Instalate:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Repozitoriu Online de moduri" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Nici o descriere de mod disponibilă" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Informații mod:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Redenumiți" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Dezinstalaţi Pachetul de moduri selectat" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Dezinstalaţi modul selectat" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Selectează Fișierul Modului:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "Moduri" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Nici o descriere de mod disponibilă" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Redenumiți" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Selectează Fișierul Modului:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Dezinstalaţi modul selectat" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Dezinstalaţi Pachetul de moduri selectat" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Address / Port :" msgstr "Adresă/Port" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Nume/Parolă" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Listă de servere publică" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Șterge" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Conectează" - -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "Client" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Nou" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Conectează" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -msgid "Configure" -msgstr "Configurează" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Începe jocul" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Selectează lumea:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Creative mode" msgstr "Modul Creativ" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" -msgstr "Activează Daune" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Damage enabled" +msgstr "activat" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Public" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Șterge" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "Nume/Parolă" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Listă de servere publică" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "PvP enabled" +msgstr "activat" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Configurează" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Modul Creativ" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Activează Daune" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Nume/Parolă" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Nou" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +#, fuzzy +msgid "No world created or selected!" +msgstr "Jocul nu are nume, sau nu ai selectat un joc" + +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Port server" +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Public" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Selectează lumea:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Server" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Port server" + +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Începe jocul" + +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" -msgstr "Lumină mai bună" - -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" -msgstr "Activează particulele" - -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" -msgstr "Nori 3D" - -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Copaci fantezici" - -#: builtin/mainmenu/tab_settings.lua:142 -msgid "Opaque Water" -msgstr "Apă opacă" - -#: builtin/mainmenu/tab_settings.lua:144 -#, fuzzy -msgid "Connected Glass" -msgstr "Conectează" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip Mapping" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Filtru Anizotropic" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Filtrare Biliniară" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Filtrare Triliniară" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "Umbră" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Modifică tastele" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Reset singleplayer world" -msgstr "Singleplayer" +msgid "Disabled" +msgstr "Dezactivează MP" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Bumpmapping" -msgstr "Mip Mapping" +msgid "Enabled" +msgstr "activat" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +msgid "Games" +msgstr "Jocuri" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Pentru a permite shadere OpenGL trebuie să fie folosite." +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Selectează" + +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Setări" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Singleplayer" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "Configurează" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Meniul Principal" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "Singleplayer" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Joacă" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Singleplayer" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Selectează pachetul de textură:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Nici o informație disponibilă" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Selectează pachetul de textură:" + +#: builtin/mainmenu/tab_texturepacks.lua #, fuzzy msgid "Texturepacks" msgstr "Pachete de tetură" -#: src/client.cpp:2726 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Eroare de conexiune (timeout?)" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp msgid "Item textures..." msgstr "Texturi..." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +#, fuzzy +msgid "Loading textures..." +msgstr "Se încarcă..." + +#: src/client.cpp +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "Se rezolvă adresa..." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "Eroare de conexiune (timeout?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Nu se poate găsi sau încărca jocul \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Specificare invalidă" + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Meniul Principal" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Nici un cuvânt selectat și nici o adresă scrisă. Nimic de făcut." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "lipsă_tip_font" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "Reînviere" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "Definițiile obiectelor..." - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "Definițiile Blocurilor..." - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "Media..." - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." @@ -554,577 +620,2982 @@ msgstr "" "\n" "Verifică deug.txt pentru detalii." -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "Modifică tastele" + +#: src/game.cpp +msgid "Change Password" +msgstr "Schimbă Parola" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Se conectează la server..." + +#: src/game.cpp +msgid "Continue" +msgstr "Continuă" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Se creează clientul..." + +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "Se crează serverul..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Controale prestabilite:\n" +"- WASD: mișcare\n" +"- Spațiu: sărire/urcare\n" +"- Shift: furișare/coborâre\n" +"- Q: aruncă obiect\n" +"- I: inventar\n" +"- Mouse: întoarcere/vedere\n" +"- Click stânga: săpare/lovire\n" +"- Click dreapta: pune/folosește\n" +"- Rotiță mouse: selectează obiect\n" +"- T: chat\n" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "Ieși în Meniu" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "Ieși din joc" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "Definițiile obiectelor..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "Media..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "Definițiile Blocurilor..." + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Continuă" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "Se rezolvă adresa..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Reînviere" + +#: src/game.cpp +#, fuzzy +msgid "Shutting down..." +msgstr "Se închide..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Volum Sunet" + +#: src/game.cpp +msgid "You died." +msgstr "Ai murit." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Aleargă\" = coboară" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Înapoi" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Chat" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Comandă" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Consloă" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Apasă de 2 ori \"sari\" pentru a zbura" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Aruncă" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Înainte" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Inventar" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Sari" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Tastă deja folosită" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Keybindings. (Dacă acest meniu apare, șterge lucrurile din minetest.conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Aleargă\" = coboară" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Apasă de 2 ori \"sari\" pentru a zbura" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "Tastă deja folosită" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "apasă o tastă" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "Înainte" - -#: src/guiKeyChangeMenu.cpp:398 -msgid "Backward" -msgstr "Înapoi" - -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Stânga" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Dreapta" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Aleargă" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Sari" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "Furișează" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "Aruncă" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "Inventar" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Chat" -msgstr "Chat" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Command" -msgstr "Comandă" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Console" -msgstr "Consloă" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "Intră pe zbor" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "Intră pe rapid" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "Intră pe noclip" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "Selectare distanță" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Salvează logurile" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" -msgstr "Vechea parolă" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Selectare distanță" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" -msgstr "Noua parolă" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Dreapta" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" -msgstr "Confirmarea parolei" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Furișează" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Intră pe rapid" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Intră pe rapid" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Intră pe zbor" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Intră pe noclip" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Aleargă" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "apasă o tastă" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Schimbă" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Confirmarea parolei" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Noua parolă" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Vechea parolă" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Parolele nu se potrivesc!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "Volum sunet: " - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Ieșire" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Stânga" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Volum sunet: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Rotiță" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Drepata" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "X Butonul 1" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "Înapoi" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "Șterge" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "Înapoi" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "X Butonul 2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Capital" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Control" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Meniu" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Pauză" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "Convert" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Escape" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Final" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "Nonconvert" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "Schimbă modul" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Următorul" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Anteriorul" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Spațiu" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Jos" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Execută" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Print" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Selectează" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Sus" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Ajutor" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "PrintScreen" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "Windows Stânga" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "Aplicații" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "Windows Dreapta" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Sleep" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Numpad *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Shift Stânga" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Shift Dreapta" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Ctrl Stânga" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Meniu Stânga" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Ctrl Dreapta" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Meniu Drepata" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Virgulă" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "Minus" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "Punct" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Plus" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "Attn" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "Înapoi" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Capital" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Șterge" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Virgulă" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Convert" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "Jos" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Ștergere OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "Execută" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "Ajutor" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Stânga" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Ctrl Stânga" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Meniu Stânga" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Shift Stânga" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Windows Stânga" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Meniu" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Rotiță" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Minus" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Schimbă modul" + +#: src/keycode.cpp +msgid "Next" +msgstr "Următorul" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Nonconvert" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numpad *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numpad +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numpad -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numpad /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "Curățare OEM" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "Pauză" + +#: src/keycode.cpp +msgid "Period" +msgstr "Punct" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Plus" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Anteriorul" + +#: src/keycode.cpp +msgid "Return" +msgstr "Înapoi" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Drepata" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Ctrl Dreapta" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Meniu Drepata" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Shift Dreapta" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Windows Dreapta" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Selectează" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Sleep" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "PrintScreen" + +#: src/keycode.cpp +msgid "Space" +msgstr "Spațiu" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Sus" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X Butonul 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X Butonul 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Mărire" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "Nori 3D" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Filtru Anizotropic" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Înapoi" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Filtrare Biliniară" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Se rezolvă adresa..." + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bumpmapping" +msgstr "Mip Mapping" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Modifică tastele" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Modifică tastele" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Modul Creativ" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Modul Creativ" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "Nori 3D" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" msgstr "Meniul Principal" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "Colored fog" msgstr "" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Eroare de conexiune (timeout?)" - -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Nici un cuvânt selectat și nici o adresă scrisă. Nimic de făcut." - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Nu se poate găsi sau încărca jocul \"" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Comandă" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Specificare invalidă" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Conectează" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Se conectează la server..." + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Consloă" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Consloă" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Consloă" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Control" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Activează Daune" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default game" +msgstr "modifică jocul" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Noua parolă" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Activează particulele" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "Apasă de 2 ori \"sari\" pentru a zbura" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "Apasă de 2 ori \"sari\" pentru a zbura" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "Repozitoriu Online de moduri" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Activează Daune" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "lipsă_tip_font" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Filtru Anizotropic" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Înainte" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Generate normalmaps" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Dezactivează MP" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "activat" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Joc" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Inventar" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Sari" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Meniu Stânga" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Meniul Principal" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Meniul Principal" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Meniu" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Mip Mapping" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion Scale" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion bias" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion iterations" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax occlusion strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player name" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Se încarcă..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Selectare distanță" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Meniu Drepata" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "PrintScreen" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Singleplayer" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Port server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "Port server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Port server" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Listă de servere publică" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Listă de servere publică" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Umbră" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Lumină mai bună" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Furișează" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of generated normalmaps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Pachete de tetură" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Filtrare Triliniară" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "apasă o tastă" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Dezvoltatori de bază" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Volum Sunet" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving Nodes" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Copaci fantezici" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Game Name" +#~ msgstr "Numele jocului" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Nu se poate copia modul \"$1\" în jocul \"$2\"" + +#~ msgid "GAMES" +#~ msgstr "JOCURI" + +#~ msgid "Mods:" +#~ msgstr "Moduri:" + +#~ msgid "new game" +#~ msgstr "joc nou" + +#~ msgid "EDIT GAME" +#~ msgstr "MODIFICĂ JOCUL" + +#~ msgid "Remove selected mod" +#~ msgstr "Șterge modul selectat" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Adaugă modul" + +#~ msgid "CLIENT" +#~ msgstr "CLIENT" + +#~ msgid "Favorites:" +#~ msgstr "Preferate:" + +#~ msgid "START SERVER" +#~ msgstr "DESCHIDE SERVERUL" + +#~ msgid "Name" +#~ msgstr "Nume" + +#~ msgid "Password" +#~ msgstr "Parolă" + +#~ msgid "SETTINGS" +#~ msgstr "SETĂRI" + +#~ msgid "Preload item visuals" +#~ msgstr "Pre-încarcă imaginile obiectelor" + +#~ msgid "Finite Liquid" +#~ msgstr "Lichid finit" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "SINGLE PLAYER" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "PACHETE DE TEXTURĂ" + +#~ msgid "MODS" +#~ msgstr "MODURI" + +#~ msgid "Add mod:" +#~ msgstr "Adăugaţi mod:" + +#~ msgid "Local install" +#~ msgstr "Instalare locală" #~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" #~ "Click stânga: Mută toate obiectele, Click dreapta: Mută un singur obiect" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Controale prestabilite:\n" -#~ "- WASD: mișcare\n" -#~ "- Spațiu: sărire/urcare\n" -#~ "- Shift: furișare/coborâre\n" -#~ "- Q: aruncă obiect\n" -#~ "- I: inventar\n" -#~ "- Mouse: întoarcere/vedere\n" -#~ "- Click stânga: săpare/lovire\n" -#~ "- Click dreapta: pune/folosește\n" -#~ "- Rotiță mouse: selectează obiect\n" -#~ "- T: chat\n" +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "Descarcă" -#~ msgid "Exit to OS" -#~ msgstr "Ieși din joc" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Pentru a permite shadere OpenGL trebuie să fie folosite." -#~ msgid "Exit to Menu" -#~ msgstr "Ieși în Meniu" +#, fuzzy +#~ msgid "Reset singleplayer world" +#~ msgstr "Singleplayer" -#~ msgid "Sound Volume" -#~ msgstr "Volum Sunet" +#~ msgid "Opaque Water" +#~ msgstr "Apă opacă" -#~ msgid "Change Password" -#~ msgstr "Schimbă Parola" - -#~ msgid "Continue" -#~ msgstr "Continuă" - -#~ msgid "You died." -#~ msgstr "Ai murit." - -#~ msgid "Shutting down stuff..." -#~ msgstr "Se închide..." - -#~ msgid "Connecting to server..." -#~ msgstr "Se conectează la server..." - -#~ msgid "Resolving address..." -#~ msgstr "Se rezolvă adresa..." - -#~ msgid "Creating client..." -#~ msgstr "Se creează clientul..." - -#~ msgid "Creating server...." -#~ msgstr "Se crează serverul..." - -#~ msgid "Loading..." -#~ msgstr "Se încarcă..." - -#~ msgid "Local install" -#~ msgstr "Instalare locală" - -#~ msgid "Add mod:" -#~ msgstr "Adăugaţi mod:" - -#~ msgid "MODS" -#~ msgstr "MODURI" - -#~ msgid "TEXTURE PACKS" -#~ msgstr "PACHETE DE TEXTURĂ" - -#~ msgid "SINGLE PLAYER" -#~ msgstr "SINGLE PLAYER" - -#~ msgid "Finite Liquid" -#~ msgstr "Lichid finit" - -#~ msgid "Preload item visuals" -#~ msgstr "Pre-încarcă imaginile obiectelor" - -#~ msgid "SETTINGS" -#~ msgstr "SETĂRI" - -#~ msgid "Password" -#~ msgstr "Parolă" - -#~ msgid "Name" -#~ msgstr "Nume" - -#~ msgid "START SERVER" -#~ msgstr "DESCHIDE SERVERUL" - -#~ msgid "Favorites:" -#~ msgstr "Preferate:" - -#~ msgid "CLIENT" -#~ msgstr "CLIENT" - -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Adaugă modul" - -#~ msgid "Remove selected mod" -#~ msgstr "Șterge modul selectat" - -#~ msgid "EDIT GAME" -#~ msgstr "MODIFICĂ JOCUL" - -#~ msgid "new game" -#~ msgstr "joc nou" - -#~ msgid "edit game" -#~ msgstr "modifică jocul" - -#~ msgid "Mods:" -#~ msgstr "Moduri:" - -#~ msgid "Games" -#~ msgstr "Jocuri" - -#~ msgid "GAMES" -#~ msgstr "JOCURI" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Nu se poate copia modul \"$1\" în jocul \"$2\"" - -#~ msgid "Game Name" -#~ msgstr "Numele jocului" +#, fuzzy +#~ msgid "Opaque Leaves" +#~ msgstr "Apă opacă" diff --git a/po/ru/minetest.po b/po/ru/minetest.po index 5d9d16de..9d14d7a2 100644 --- a/po/ru/minetest.po +++ b/po/ru/minetest.po @@ -7,545 +7,598 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" -"PO-Revision-Date: 2013-12-29 16:58+0200\n" -"Last-Translator: Сергей Голубев \n" -"Language-Team: Russian\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-09-07 11:49+0200\n" +"Last-Translator: Alex “XShell” Schekoldin \n" +"Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Generator: Weblate 1.7-dev\n" +"X-Generator: Weblate 2.4-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "Ошибка в скрипте Lua в моде:" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "Произошла ошибка:" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Главное меню" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" -msgstr "Ok" +msgstr "OK" -#: builtin/mainmenu/dlg_config_world.lua:26 -msgid "World:" -msgstr "Мир:" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Подключиться" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -msgid "Hide Game" -msgstr "Скрыть игру" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" -msgstr "Скрыть содержимое модпака" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Загрузка..." -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" -msgstr "Мод:" +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 -msgid "Depends:" -msgstr "Зависит от:" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "Сохранить" +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" +"Попробуйте обновить список публичных серверов и проверьте связь с Интернетом." + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "Отменить" -#: builtin/mainmenu/dlg_config_world.lua:68 -msgid "Enable MP" -msgstr "Включить мультиплеер" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Зависит от:" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Отключить мультиплеер" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "включено" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Включить мультиплеер" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Включить всё" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Название мира" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "Сид" - -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "Генератор карты" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Игра" - -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "Создать" - -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Скрыть игру" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Скрыть содержимое модпака" -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Мод:" -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Сохранить" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Мир:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "включено" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "Мир под названием \"$1\" уже существует" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Создать" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Скачайте мини-игры, такие как minetest_game, на minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Загрузите их с minetest.net" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Игра" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Генератор карты" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Не задано имя мира или не выбрана игра" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Сид" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "Внимание: \"Minimal development test\" для разработчиков." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Название мира" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "У вас не установлено мини-игр." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "Уверены, что хотите удалить \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "Да" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "Никак нет!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr: невозможно удалить \"$1\"" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: неправильный путь \"$1\"" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Никак нет!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Да" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "Удалить мир \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Нет" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "Переименовать модпак:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Принять" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" -msgstr "Установка мода: файл \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Переименовать модпак:" -#: builtin/mainmenu/modmgr.lua:343 -#, fuzzy +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" "\n" -"Установка мода: неподдерживаемый тип \"$1\"" +"Установка мода: неподдерживаемый тип файла \"$1\" или битый архив" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" -msgstr "Ошибка при установке $1 в $2" +msgstr "Невозможно установить $1 в $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Установка мода: файл \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "Установка мода: невозможно определить название мода для $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" "Установка мода: невозможно найти подходящее имя директории для модпака $1" -#: builtin/mainmenu/modmgr.lua:386 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "Установка мода: невозможно определить название мода для $1" +#: builtin/mainmenu/store.lua +msgid "Close store" +msgstr "Закрыть хранилище" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "" +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "Загрузка $1..." -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 -msgid "Search" -msgstr "" - -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Загрузить" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:163 -#, fuzzy -msgid "Shortname:" -msgstr "Название мира" - -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 -msgid "Rating" -msgstr "Рейтинг" - -#: builtin/mainmenu/store.lua:501 -msgid "re-Install" -msgstr "Переустановить" - -#: builtin/mainmenu/store.lua:503 +#: builtin/mainmenu/store.lua msgid "Install" msgstr "Установить" -#: builtin/mainmenu/store.lua:522 -msgid "Close store" -msgstr "" - -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "Страница $1 из $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Благодарности" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Рейтинг" -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "Основные разработчики" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Поиск" -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Краткое имя:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Успешно установлено:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Не сортировано" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Переустановить" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Активные контрибьюторы" -#: builtin/mainmenu/tab_credits.lua:48 -msgid "Previous Contributors" -msgstr "В отставке" +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Основные разработчики" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Благодарности" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Contributors" +msgstr "Контрибьюторы в отставке" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "Разработчики в отставке" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Установленные моды:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "Онлайн хранилище модов" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "Описание к моду отсутствует" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Описание мода:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "Переименовать" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "Удалить выбранный мод-пак" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "Удалить выбранный мод" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "Выберите файл с модом:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "Моды" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" -msgstr "Адрес/Порт" +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Описание к моду отсутствует" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Имя/Пароль" +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Переименовать" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "Список публичных серверов" +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Выберите файл с модом:" -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "Удалить" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Удалить выбранный мод" -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Подключиться" +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Удалить выбранный мод-пак" -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Address / Port :" +msgstr "Адрес / Порт:" + +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "Клиент" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Новый" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Подключиться" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "Режим творчества" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Разрешить увечья" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Удалить" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Имя / Пароль:" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Список публичных серверов" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "PvP разрешён" + +#: builtin/mainmenu/tab_server.lua +msgid "Bind Address" +msgstr "Адрес" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua msgid "Configure" msgstr "Настроить" -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "Начать игру" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Выберите мир:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Creative Mode" -msgstr "Режим создания" +msgstr "Режим творчества" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua msgid "Enable Damage" -msgstr "Включить урон" +msgstr "Разрешить увечья" -#: builtin/mainmenu/tab_server.lua:35 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Имя / Пароль" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Новый" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "Не выбран мир!" + +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "Порт" + +#: builtin/mainmenu/tab_server.lua msgid "Public" msgstr "Публичные" -#: builtin/mainmenu/tab_server.lua:45 -msgid "Bind Address" -msgstr "" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Выберите мир:" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "" - -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "Порт" - -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Сервер" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Порт сервера" + +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Начать игру" + +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" -msgstr "Мягкое освещение" - -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" -msgstr "Включить частицы" - -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" -msgstr "3D облака" - -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Красивые деревья" - -#: builtin/mainmenu/tab_settings.lua:142 -msgid "Opaque Water" -msgstr "Непрозрачная вода" - -#: builtin/mainmenu/tab_settings.lua:144 -#, fuzzy -msgid "Connected Glass" -msgstr "Подключиться" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" msgstr "" -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "Mip-текстурирование" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Анизотропная фильтрация" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Билинейная фильтрация" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Трилинейная фильтрация" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "Шейдеры" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Смена управления" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Reset singleplayer world" -msgstr "Одиночная игра" +msgid "Disabled" +msgstr "Отключить мультиплеер" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Bumpmapping" -msgstr "Mip-текстурирование" +msgid "Enabled" +msgstr "включено" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +msgid "Games" +msgstr "Игры" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "Для включения шейдеров необходим драйвер OpenGL." +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Выбор" + +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Настройки" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Одиночная игра" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 -#, fuzzy +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" -msgstr "Настроить" +msgstr "Настройка модов" -#: builtin/mainmenu/tab_simple_main.lua:191 -#, fuzzy +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "Главное меню" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Начать одиночную игру" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Играть" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Одиночная игра" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "Выберите пакет текстур:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Описание отсутствует" -#: builtin/mainmenu/tab_texturepacks.lua:114 -#, fuzzy +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Выберите пакет текстур:" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "Пакеты текстур" -#: src/client.cpp:2726 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Ошибка соединения (таймаут?)" + +#: src/client.cpp +msgid "Done!" +msgstr "Готово!" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Инициирование нод" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Инициирование нод..." + +#: src/client.cpp msgid "Item textures..." msgstr "Текстуры предметов..." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +msgid "Loading textures..." +msgstr "Загрузка текстур..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Сборка шейдеров..." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "Ошибка соединения (таймаут?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Невозможно найти или загрузить игру \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Неправильная конфигурация игры." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Главное меню" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Не выбран мир и не введен адрес. Нечего делать." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Имя игрока слишком длинное." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "По этому пути мира нет: " + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "no" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "Возродиться" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "Описания предметов..." - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "Описания нод..." - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "Медиафайлы..." - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." @@ -553,498 +606,3012 @@ msgstr "" "\n" "Подробная информация в debug.txt." -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +msgid "Change Keys" +msgstr "Смена управления" + +#: src/game.cpp +msgid "Change Password" +msgstr "Изменить пароль" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Подключение к серверу..." + +#: src/game.cpp +msgid "Continue" +msgstr "Продолжить" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Создание клиента..." + +#: src/game.cpp +msgid "Creating server..." +msgstr "Создание сервера..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Управление по умолчанию:\n" +"- WASD: движение\n" +"- Пробел: прыжок/вверх\n" +"- Shift: красться/вниз\n" +"- Q: бросить предмет\n" +"- I: инвентарь\n" +"- Мышка: поворот\n" +"- ЛКМ: копать/удар\n" +"- ПКМ: поставить/использовать\n" +"- Колесико мыши: выбор предмета\n" +"- T: чат\n" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" +"Управление по умолчанию:\n" +"Не в меню:\n" +"- одно нажатие: кнопка активаций\n" +"- двойное нажатие: положить/использовать\n" +"- скольжение пальцем: осмотреться\n" +"В меню/инвертаре:\n" +"- двойное нажатие (вне меню)\n" +"--> закрыть меню\n" +"- Нажать на стопку, затем на ячейку:\n" +"--> Двигать стопку\n" +"- Потащить одним пальцем стопку в нужную ячейку, нажать вторым пальцем на " +"экран:\n" +"--> Положить один предмет в ячейку\n" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "Выход в меню" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "Выход в ОС" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "Описания предметов..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "КиБ/с" + +#: src/game.cpp +msgid "Media..." +msgstr "Медиафайлы..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "МиБ/с" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "Описания нод..." + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Продолжить" -#: src/guiFormSpecMenu.cpp:2846 -msgid "Enter " -msgstr "" +#: src/game.cpp +msgid "Resolving address..." +msgstr "Получение адреса..." -#: src/guiKeyChangeMenu.cpp:125 +#: src/game.cpp +msgid "Respawn" +msgstr "Возродиться" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Завершение..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Громкость звука" + +#: src/game.cpp +msgid "You died." +msgstr "Вы умерли." + +#: src/guiFormSpecMenu.cpp +msgid "Enter " +msgstr "Введите " + +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "OK" + +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "\"Использовать\" = вниз" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Назад" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Чат" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Команда" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Консоль" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Двойной прыжок = летать" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Бросить" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Вперед" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Инвентарь" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Прыжок" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Клавиша уже используется" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Сочетания клавиш. (Если это меню сломалось, удалите настройки из minetest." "conf)" -#: src/guiKeyChangeMenu.cpp:165 -msgid "\"Use\" = climb down" -msgstr "\"Использовать\" = вниз" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Двойной прыжок = летать" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "Клавиша уже используется" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "нажмите клавишу" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "Вперед" - -#: src/guiKeyChangeMenu.cpp:398 -msgid "Backward" -msgstr "Назад" - -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Влево" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Вправо" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Использовать" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Прыжок" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "Красться" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "Бросить" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "Инвентарь" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Chat" -msgstr "Чат" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Command" -msgstr "Команда" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Console" -msgstr "Консоль" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "Полёт" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "Ускорение" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "Включить noclip" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "Зона видимости" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Печать стеков" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" -msgstr "Старый пароль" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Зона видимости" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" -msgstr "Новый пароль" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Вправо" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" -msgstr "Подтверждение пароля" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Красться" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "Киношность" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Ускорение" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Полёт" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Включить noclip" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Использовать" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "нажмите клавишу" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Изменить" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Подтверждение пароля" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Новый пароль" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Старый пароль" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Пароли не совпадают!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "Громкость звука: " - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Выход" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Левая кнопка" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Громкость звука: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Средняя кнопка" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Правая кнопка" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "Доп. кнопка 1" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "Назад" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "Очистить" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "Вернуться" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "Доп. кнопка 2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Caps Lock" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Ctrl" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Кана" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Меню" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Пауза" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "Преобразовать" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Escape" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Конец" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Кандзи" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "Не преобразовано" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "Mode Change" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Next" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Prior" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "Пробел" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Вниз" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "Выполнить" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Print" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Выбор" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Вверх" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Справка" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "Cнимок" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "Левая кл. Win" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "Приложения" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Доп. клав. 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Доп. клав. 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "Прав. кл. Win" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Sleep" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Доп. клав. 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Доп. клав. 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Доп. клав. 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Доп. клав. 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Доп. клав. 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Доп. клав. 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Доп. клав. *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Доп. клав. +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Доп. клав. -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Доп. клав. /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Доп. клав. 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Доп. клав. 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Левый Shift" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Правый Shift" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Левый Ctrl" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Левая клавиша меню" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Правый Ctrl" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Правая клавиша меню" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Запятая" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "Минус" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "Период" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Плюс" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "Внимание" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "Назад" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Caps Lock" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Очистить" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Запятая" + +#: src/keycode.cpp +msgid "Control" +msgstr "Ctrl" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Преобразовать" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "Вниз" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Стереть ОНС" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "Выполнить" + +#: src/keycode.cpp +msgid "Final" +msgstr "Конец" + +#: src/keycode.cpp +msgid "Help" +msgstr "Справка" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Кана" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Кандзи" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Левая кнопка" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Левый Ctrl" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Левая клавиша меню" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Левый Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Левая кл. Win" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Меню" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Средняя кнопка" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Минус" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Mode Change" + +#: src/keycode.cpp +msgid "Next" +msgstr "Next" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Не преобразовано" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Доп. клав. *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Доп. клав. +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Доп. клав. -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Доп. клав. /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Доп. клав. 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Доп. клав. 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Доп. клав. 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Доп. клав. 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Доп. клав. 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Доп. клав. 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Доп. клав. 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Доп. клав. 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Доп. клав. 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Доп. клав. 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "Очистить OEM" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "Пауза" + +#: src/keycode.cpp +msgid "Period" +msgstr "Период" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Плюс" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Prior" + +#: src/keycode.cpp +msgid "Return" +msgstr "Вернуться" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Правая кнопка" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Правый Ctrl" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Правая клавиша меню" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Правый Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Прав. кл. Win" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Выбор" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Sleep" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Cнимок" + +#: src/keycode.cpp +msgid "Space" +msgstr "Пробел" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Вверх" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "Доп. кнопка 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "Доп. кнопка 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Масштаб" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "3D облака" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "Дополнительно" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Анизотропная фильтрация" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Назад" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Билинейная фильтрация" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Адрес" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Build inside player" +msgstr "Сетевая игра" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "Бампмаппинг" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Смена управления" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Смена управления" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Режим творчества" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Режим творчества" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "3D облака" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" msgstr "Главное меню" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "Colored fog" msgstr "" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Ошибка соединения (таймаут?)" - -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Не выбран мир и не введен адрес." - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Невозможно найти или загрузить игру \"" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Команда" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Неправильная конфигурация игры." +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Стёкла без швов" -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "ЛКМ: Переместить все предметы, ПКМ: Переместить один предмет" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Подключение к серверу..." -#~ msgid "is required by:" -#~ msgstr "требуется для:" +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" -#~ msgid "Configuration saved. " -#~ msgstr "Настройки сохранены. " +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Консоль" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Предупреждение: Неверная конфигурация. " +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Консоль" -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Невозможно создать мир: Имя содержит недопустимые символы" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Консоль" -#~ msgid "Multiplayer" -#~ msgstr "Сетевая игра" +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" -#~ msgid "Advanced" -#~ msgstr "Дополнительно" +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" -#~ msgid "Show Public" -#~ msgstr "Публичные" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Ctrl" -#~ msgid "Show Favorites" -#~ msgstr "Избранные" +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Оставьте адрес пустым для запуска локального сервера." +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" -#~ msgid "Create world" -#~ msgstr "Создать мир" +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" -#~ msgid "Address required." -#~ msgstr "Нужно ввести адрес." +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Невозможно удалить мир: Ничего не выбрано" +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" -#~ msgid "Files to be deleted" -#~ msgstr "Следующие файлы будут удалены" +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" -#~ msgid "Cannot create world: No games found" -#~ msgstr "Невозможно создать мир: Ни одной игры не найдено" +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Невозможно настроить мир: ничего не выбрано" +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" -#~ msgid "Failed to delete all world files" -#~ msgstr "Ошибка при удалении файлов мира" +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Разрешить увечья" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default game" +msgstr "Редактировать" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Новый пароль" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Включить частицы" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "Двойной прыжок = летать" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "Двойной прыжок = летать" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "Онлайн-хранилище модов" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Разрешить увечья" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "no" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Без фильтраций" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Вперед" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "GUI scaling filter" +msgstr "Масштаб интерфейса" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Generate normalmaps" +msgstr "Генерировать карты нормалей" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Отключить мультиплеер" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "включено" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Игра" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Инвентарь" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Прыжок" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Левая клавиша меню" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Главное меню" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Главное меню" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Генератор карты" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Генератор карты" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Генератор карты" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Генератор карты" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Генератор карты" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Генератор карты" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Меню" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Mip-текстурирование" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Node highlighting" +msgstr "Подсветка нод" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion Scale" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion bias" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion iterations" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion mode" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion strength" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Player name" +msgstr "Имя игрока слишком длинное." + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Загрузка текстур..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Зона видимости" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Правая клавиша меню" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Cнимок" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Начать одиночную игру" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Сервер" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Порт сервера" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "Порт сервера" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Сервер" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Порт сервера" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Список публичных серверов" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Список публичных серверов" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Шейдеры" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Мягкое освещение" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Красться" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of generated normalmaps." +msgstr "Генерировать карты нормалей" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Пакеты текстур" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Трилинейная фильтрация" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "нажмите клавишу" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Разработчики в отставке" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Громкость звука" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Walking speed" +msgstr "Покачивание листвы" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving Nodes" +msgstr "Покачивание листвы" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Покачивание листвы" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving plants" +msgstr "Покачивание растений" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water" +msgstr "Волны на воде" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water height" +msgstr "Волны на воде" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water length" +msgstr "Волны на воде" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water speed" +msgstr "Волны на воде" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Rendering:" +#~ msgstr "Рендеринг:" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Перезапустите Minetest для принятия изменений" + +#~ msgid "Game Name" +#~ msgstr "Название" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "Gamemgr: Не могу скопировать мод \"$1\" в игру \"$2\"" + +#~ msgid "GAMES" +#~ msgstr "ИГРЫ" + +#~ msgid "Mods:" +#~ msgstr "Моды:" + +#~ msgid "new game" +#~ msgstr "Создать игру" + +#~ msgid "EDIT GAME" +#~ msgstr "РЕДАКТИРОВАНИЕ" + +#~ msgid "Remove selected mod" +#~ msgstr "Удалить мод" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- Добавить мод" + +#~ msgid "CLIENT" +#~ msgstr "КЛИЕНТ" + +#~ msgid "Favorites:" +#~ msgstr "Избранное:" + +#~ msgid "START SERVER" +#~ msgstr "СЕРВЕР" + +#~ msgid "Name" +#~ msgstr "Имя" + +#~ msgid "Password" +#~ msgstr "Пароль" + +#~ msgid "SETTINGS" +#~ msgstr "НАСТРОЙКИ" + +#~ msgid "Preload item visuals" +#~ msgstr "Предзагрузка изображений" + +#~ msgid "Finite Liquid" +#~ msgstr "Конечные жидкости" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "ОДИНОЧНАЯ ИГРА" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "ПАКЕТЫ ТЕКСТУР" + +#~ msgid "MODS" +#~ msgstr "МОДЫ" + +#~ msgid "Add mod:" +#~ msgstr "Добавить мод:" + +#~ msgid "Local install" +#~ msgstr "Локальная установка" + +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "Предупреждение: Некоторые моды еще не настроены.\n" +#~ "Их стандартные настройки будут установлены, когда вы сохраните " +#~ "конфигурацию. " + +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "Предупреждение: Некоторые моды не найдены.\n" +#~ "Их настройки будут удалены, когда вы сохраните конфигурацию. " #~ msgid "" #~ "Default Controls:\n" @@ -1071,147 +3638,96 @@ msgstr "Неправильная конфигурация игры." #~ "- ESC: это меню\n" #~ "- T: чат\n" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "Предупреждение: Некоторые моды не найдены.\n" -#~ "Их настройки будут удалены, когда вы сохраните конфигурацию. " +#~ msgid "Failed to delete all world files" +#~ msgstr "Ошибка при удалении файлов мира" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "Предупреждение: Некоторые моды еще не настроены.\n" -#~ "Их стандартные настройки будут установлены, когда вы сохраните " -#~ "конфигурацию. " +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Невозможно настроить мир: ничего не выбрано" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "Управление по умолчанию:\n" -#~ "- WASD: движение\n" -#~ "- Пробел: прыжок/вверх\n" -#~ "- Shift: красться/вниз\n" -#~ "- Q: бросить предмет\n" -#~ "- I: инвентарь\n" -#~ "- Мышка: поворот\n" -#~ "- ЛКМ: копать/удар\n" -#~ "- ПКМ: поставить/использовать\n" -#~ "- Колесико мыши: выбор предмета\n" -#~ "- T: чат\n" +#~ msgid "Cannot create world: No games found" +#~ msgstr "Невозможно создать мир: Ни одной игры не найдено" -#~ msgid "Exit to OS" -#~ msgstr "Выход в ОС" +#~ msgid "Files to be deleted" +#~ msgstr "Следующие файлы будут удалены" -#~ msgid "Exit to Menu" -#~ msgstr "Выход в меню" +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Невозможно удалить мир: Ничего не выбрано" -#~ msgid "Sound Volume" -#~ msgstr "Громкость звука" +#~ msgid "Address required." +#~ msgstr "Нужно ввести адрес." -#~ msgid "Change Password" -#~ msgstr "Изменить пароль" +#~ msgid "Create world" +#~ msgstr "Создать мир" -#~ msgid "Continue" -#~ msgstr "Продолжить" +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Оставьте адрес пустым для запуска локального сервера." -#~ msgid "You died." -#~ msgstr "Вы умерли." +#~ msgid "Show Favorites" +#~ msgstr "Избранные" -#~ msgid "Shutting down stuff..." -#~ msgstr "Завершение работы..." +#~ msgid "Show Public" +#~ msgstr "Публичные" -#~ msgid "Connecting to server..." -#~ msgstr "Подключение к серверу..." +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Невозможно создать мир: Имя содержит недопустимые символы" -#~ msgid "Resolving address..." -#~ msgstr "Получение адреса..." +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Предупреждение: Неверная конфигурация. " -#~ msgid "Creating client..." -#~ msgstr "Создание клиента..." +#~ msgid "Configuration saved. " +#~ msgstr "Настройки сохранены. " -#~ msgid "Creating server...." -#~ msgstr "Создание сервера..." +#~ msgid "is required by:" +#~ msgstr "требуется для:" -#~ msgid "Loading..." -#~ msgstr "Загрузка..." +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "ЛКМ: Переместить все предметы, ПКМ: Переместить один предмет" -#~ msgid "Local install" -#~ msgstr "Локальная установка" +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "Загрузить" -#~ msgid "Add mod:" -#~ msgstr "Добавить мод:" +#~ msgid "Touchthreshold (px)" +#~ msgstr "Чувствительность (пк)" -#~ msgid "MODS" -#~ msgstr "МОДЫ" +#~ msgid "Touch free target" +#~ msgstr "Свободный выбор цели" -#~ msgid "TEXTURE PACKS" -#~ msgstr "ПАКЕТЫ ТЕКСТУР" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "Для включения шейдеров необходим драйвер OpenGL." -#~ msgid "SINGLE PLAYER" -#~ msgstr "ОДИНОЧНАЯ ИГРА" +#~ msgid "Texturing:" +#~ msgstr "Текстурирование:" -#~ msgid "Finite Liquid" -#~ msgstr "Конечные жидкости" +#~ msgid "Simple Leaves" +#~ msgstr "Упрощённая листва" -#~ msgid "Preload item visuals" -#~ msgstr "Предзагрузка изображений" +#~ msgid "Scaling factor applied to menu elements: " +#~ msgstr "Коэффициент масштаба интерфейса: " -#~ msgid "SETTINGS" -#~ msgstr "НАСТРОЙКИ" +#~ msgid "Reset singleplayer world" +#~ msgstr "Сброс одиночной игры" -#~ msgid "Password" -#~ msgstr "Пароль" +#~ msgid "Opaque Water" +#~ msgstr "Непрозрачная вода" -#~ msgid "Name" -#~ msgstr "Имя" +#~ msgid "Opaque Leaves" +#~ msgstr "Непрозрачная листва" -#~ msgid "START SERVER" -#~ msgstr "СЕРВЕР" +#~ msgid "No!!!" +#~ msgstr "Нет!" -#~ msgid "Favorites:" -#~ msgstr "Избранное:" +#~ msgid "No Mipmap" +#~ msgstr "Без Мипмаппинга" -#~ msgid "CLIENT" -#~ msgstr "КЛИЕНТ" +#~ msgid "Mipmap + Aniso. Filter" +#~ msgstr "Мипмаппинг с анизотр. фильтром" -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- Добавить мод" +#~ msgid "Mipmap" +#~ msgstr "Мипмаппинг" -#~ msgid "Remove selected mod" -#~ msgstr "Удалить мод" +#~ msgid "Fancy Leaves" +#~ msgstr "Красивая листва" -#~ msgid "EDIT GAME" -#~ msgstr "РЕДАКТИРОВАНИЕ" - -#~ msgid "new game" -#~ msgstr "Создать игру" - -#~ msgid "edit game" -#~ msgstr "Редактировать" - -#~ msgid "Mods:" -#~ msgstr "Моды:" - -#~ msgid "Games" -#~ msgstr "Игры" - -#~ msgid "GAMES" -#~ msgstr "ИГРЫ" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "Gamemgr: Не могу скопировать мод \"$1\" в игру \"$2\"" - -#~ msgid "Game Name" -#~ msgstr "Название" +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr "Уверены, что хотите сбросить мир одиночной игры?" diff --git a/po/tr/minetest.po b/po/tr/minetest.po index 8252bc6b..da3ca511 100644 --- a/po/tr/minetest.po +++ b/po/tr/minetest.po @@ -2,778 +2,663 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR mahmutelmas06@gmail.com, 2015. -#, approved msgid "" msgstr "" "Project-Id-Version: 0.1.2\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-04 14:450200\n" -"PO-Revision-Date: 2015-03-22 23:56+0200\n" -"Last-Translator: Mahmut Elmas mahmutelmas06@gmail.com\n" -"Language-Team: Türkçe <>\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-07-14 16:48+0200\n" +"Last-Translator: Michal Čihař \n" +"Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Eazy Po 0.9.5.3\n" +"X-Generator: Weblate 2.4-dev\n" "X-Poedit-Language: Turkish\n" "X-Poedit-Basepath: \n" -#: builtin/fstk/ui.lua:67 -#, approved +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "Ana menu" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "Tamam" -#: builtin/mainmenu/dlg_config_world.lua:26 -#, approved -#| msgid "World:" -msgid "World:" -msgstr "Dünya:" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "Bağlan" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -#, approved -#| msgid "Hide Game" -msgid "Hide Game" -msgstr "Oyunu Gizle" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -#, approved -msgid "Hide mp content" -msgstr "Detayları gizle" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Yükleniyor..." -#: builtin/mainmenu/dlg_config_world.lua:46 -#, approved -#| msgid "Mod:" -msgid "Mod:" -msgstr "Eklnt: " +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 -#, approved -#| msgid "Depends:" -msgid "Depends:" -msgstr "Bağımlılıklar :" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -#, approved -msgid "Save" -msgstr "Kaydet" +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 -#, approved -#| msgid "Cancel" +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "Vazgeç" -#: builtin/mainmenu/dlg_config_world.lua:68 -#, approved -msgid "Enable MP" -msgstr "Paketi Aç" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "Bağımlılıklar :" -#: builtin/mainmenu/dlg_config_world.lua:70 -#, approved -#| msgid "Disable MP" +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "Paketi Kapat" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -#, approved -#| msgid "enabled" -msgid "enabled" -msgstr "Etkinleştirildi" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Paketi Aç" -#: builtin/mainmenu/dlg_config_world.lua:82 -#, approved -#| msgid "Enable all" +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "Hepsini etkinleştir" -#: builtin/mainmenu/dlg_create_world.lua:50 -#, approved -msgid "World name" -msgstr "Dünya adı" - -#: builtin/mainmenu/dlg_create_world.lua:53 -#, approved -#| msgid "Seed" -msgid "Seed" -msgstr "Çekirdek" - -#: builtin/mainmenu/dlg_create_world.lua:56 -#, approved -#| msgid "Mapgen" -msgid "Mapgen" -msgstr "Mapgen" - -#: builtin/mainmenu/dlg_create_world.lua:59 -#, approved -msgid "Game" -msgstr "Oyun" - -#: builtin/mainmenu/dlg_create_world.lua:63 -#, approved -msgid "Create" -msgstr "Oluştur" - -#: builtin/mainmenu/dlg_create_world.lua:68 -#, approved -#| msgid "You have no subgames installed." -msgid "You have no subgames installed." -msgstr "Ek bir oyun modu yüklü değil." - -#: builtin/mainmenu/dlg_create_world.lua:69 -#, approved -#| msgid "Download one from minetest.net" -msgid "Download one from minetest.net" -msgstr "Minetest.net adresinden indirin" - -#: builtin/mainmenu/dlg_create_world.lua:72 -#, approved +#: builtin/mainmenu/dlg_config_world.lua msgid "" -"Warning: The minimal development test is meant for " -"developers." -msgstr "Uyarı : Minimal Development Test geliştiriciler içindir." +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:73 -#, approved -msgid "" -"Download a subgame, such as minetest_game, from " -"minetest.net" -msgstr "Minetest.net adresinden bir oyun modu indirin" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Oyunu Gizle" -#: builtin/mainmenu/dlg_create_world.lua:97 -#, approved +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Detayları gizle" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Eklnt:" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "Kaydet" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Dünya:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "Etkinleştirildi" + +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr " \"$1\" isimli dünya zaten var" -#: builtin/mainmenu/dlg_create_world.lua:116 -#, approved +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "Oluştur" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "Minetest.net adresinden bir oyun modu indirin" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Minetest.net adresinden indirin" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Oyun" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Mapgen" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "Dünya seçilmedi ya da adlandırılmadı" -#: builtin/mainmenu/dlg_delete_mod.lua:26 -#, approved +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Çekirdek" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "Uyarı : Minimal Development Test geliştiriciler içindir." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Dünya adı" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Ek bir oyun modu yüklü değil." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" -msgstr "" -" \"$1\" 'i silmek istediğinizden emin misiniz " -"?" +msgstr " \"$1\" 'i silmek istediğinizden emin misiniz ?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -#, approved -msgid "Yes" -msgstr "Evet" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -#, approved -msgid "No of course not!" -msgstr "Elbette hayır!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 -#, approved +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "Modmgr:\"$1\" dosyası silerken hata" -#: builtin/mainmenu/dlg_delete_mod.lua:45 -#, approved +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "Modmgr: \"$1\" eklenti konumu yanlış" -#: builtin/mainmenu/dlg_delete_world.lua:24 -#, approved +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Elbette hayır!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "Evet" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr " \"$1\" dünyasını sil ?" -#: builtin/mainmenu/dlg_delete_world.lua:26 -#, approved +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Hayır" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -#, approved -msgid "Rename Modpack:" -msgstr "Eklenti paketini yeniden adlandır :" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 -#, approved +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "Kabul et" -#: builtin/mainmenu/modmgr.lua:342 -#, approved -msgid "Install Mod: file: \"$1\"" -msgstr "Eklenti yükle: Dosya: \"$1\"" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "Eklenti paketini yeniden adlandır :" -#: builtin/mainmenu/modmgr.lua:343 -#, approved +#: builtin/mainmenu/modmgr.lua msgid "" "\n" -"Install Mod: unsupported filetype \"$1\" or broken " -"archive" +"Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" "\n" -"Eklenti yükle: Desteklenmeyen dosya uzantısı \"$1\" veya bozuk " -"dosya" +"Eklenti yükle: Desteklenmeyen dosya uzantısı \"$1\" veya bozuk dosya" -#: builtin/mainmenu/modmgr.lua:363 -#, approved +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr " $1 arası $2 yükleme başarısız" -#: builtin/mainmenu/modmgr.lua:366 -#, approved -msgid "" -"Install Mod: unable to find suitable foldername for modpack " -"$1" -msgstr "Eklenti yükle:$1 eklenti paketi için uygun bir klasör adı bulunamadı" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Eklenti yükle: Dosya: \"$1\"" -#: builtin/mainmenu/modmgr.lua:386 -#, approved -msgid "" -"Install Mod: unable to find real modname for: " -"$1" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" msgstr "Eklenti yükle: $1 için eklenti adı bulunamadı" -#: builtin/mainmenu/store.lua:88 -#, approved -msgid "Unsorted" -msgstr "Sıralanmamış" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" +msgstr "Eklenti yükle:$1 eklenti paketi için uygun bir klasör adı bulunamadı" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 -#, approved -msgid "Search" -msgstr "Ara" - -#: builtin/mainmenu/store.lua:125 -#, approved -msgid "Downloading" -msgstr "İndiriliyor" - -#: builtin/mainmenu/store.lua:127 -#, approved -msgid "please wait..." -msgstr "lütfen bekleyin..." - -#, approved -msgid "Downloading $1, please wait..." -msgstr " $1, indiriliyor, lütfen bekleyin" - -#: builtin/mainmenu/store.lua:159 -#, approved -msgid "Successfully installed:" -msgstr "Yükleme başarılı :" - -#: builtin/mainmenu/store.lua:163 -#, approved -msgid "Shortname:" -msgstr "Takma ad :" - -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -#, approved -msgid "ok" -msgstr "tamam" - -#: builtin/mainmenu/store.lua:476 -#, approved -msgid "Rating" -msgstr "Oylama" - -#: builtin/mainmenu/store.lua:501 -#, approved -msgid "re-Install" -msgstr "yeniden yükle" - -#: builtin/mainmenu/store.lua:503 -#, approved -msgid "Install" -msgstr "Yükle" - -#: builtin/mainmenu/store.lua:522 -#, approved +#: builtin/mainmenu/store.lua msgid "Close store" msgstr "Mağazayı kapat" -#: builtin/mainmenu/store.lua:530 -#, approved +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr " $1, indiriliyor, lütfen bekleyin" + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Yükle" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" msgstr "$2 sayfadan $1 'cisi" -#: builtin/mainmenu/tab_credits.lua:22 -#, approved -msgid "Credits" -msgstr "Hakkında" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Oylama" -#: builtin/mainmenu/tab_credits.lua:29 -#, approved -msgid "Core Developers" -msgstr "Ana geliştiriciler" +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Ara" -#: builtin/mainmenu/tab_credits.lua:43 -#, approved +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Takma ad :" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Yükleme başarılı :" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Sıralanmamış" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "yeniden yükle" + +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "Aktif katkı sağlayanlar" -#: builtin/mainmenu/tab_credits.lua:48 -#, approved +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "Ana geliştiriciler" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Hakkında" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "Katkı sağlayanlar" -#: builtin/mainmenu/tab_mods.lua:30 -#, approved +#: builtin/mainmenu/tab_credits.lua +#, fuzzy +msgid "Previous Core Developers" +msgstr "Ana geliştiriciler" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "Yüklenen eklentiler :" -#: builtin/mainmenu/tab_mods.lua:39 -#, approved -msgid "Online mod repository" -msgstr "Çevirimiçi eklenti deposu" - -#: builtin/mainmenu/tab_mods.lua:78 -#, approved -msgid "No mod description available" -msgstr "Eklenti bilgisi yok" - -#: builtin/mainmenu/tab_mods.lua:82 -#, approved +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "Eklenti bilgileri:" -#: builtin/mainmenu/tab_mods.lua:93 -#, approved -msgid "Rename" -msgstr "Adlandır" - -#: builtin/mainmenu/tab_mods.lua:95 -#, approved -msgid "Uninstall selected modpack" -msgstr "Seçilen eklenti paketini sil" - -#: builtin/mainmenu/tab_mods.lua:106 -#, approved -msgid "Uninstall selected mod" -msgstr "Seçili eklentiyi sil" - -#: builtin/mainmenu/tab_mods.lua:121 -#, approved -msgid "Select Mod File:" -msgstr "Eklenti seç :" - -#: builtin/mainmenu/tab_mods.lua:165 -#, approved +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "Eklentiler" -#: builtin/mainmenu/tab_multiplayer.lua:23 -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -#, approved -msgid "Name/Password" -msgstr "Kullanıcı adı/Şifre" +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Eklenti bilgisi yok" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -#, approved -msgid "Public Serverlist" -msgstr "Çevirimiçi Oyun Listesi" +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "Adlandır" -#, approved +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Eklenti seç :" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Seçili eklentiyi sil" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "Seçilen eklenti paketini sil" + +#: builtin/mainmenu/tab_multiplayer.lua msgid "Address / Port :" msgstr "Adres / Port :" -#, approved -msgid "Name / Password :" -msgstr "Kullanıcı Adı / Şifre :" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -#, approved -msgid "Delete" -msgstr "Sil" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -#, approved -msgid "Connect" -msgstr "Bağlan" - -#: builtin/mainmenu/tab_multiplayer.lua:252 -#, approved -msgid "Creative mode" -msgstr "Yaratıcı mod" - -#, approved -msgid "Damage enabled" -msgstr "Hasar alma etkin" - -#, approved -msgid "PvP enabled" -msgstr "Mücadele modu" - -#, approved +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "Çevirimiçi Oyna" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -#, approved -msgid "New" -msgstr "Yeni" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Bağlan" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -#, approved -msgid "Configure" -msgstr "Ayarla" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "Yaratıcı mod" -#: builtin/mainmenu/tab_server.lua:29 -#, approved -msgid "Start Game" -msgstr "Oyunu Başlat" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Hasar alma etkin" -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -#, approved -msgid "Select World:" -msgstr "Dünya seç :" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "Sil" -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 -#, approved -msgid "Creative Mode" -msgstr "Yaratıcı Mod" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Kullanıcı Adı / Şifre :" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 -#, approved -msgid "Enable Damage" -msgstr "Hasarı etkinleştir" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Çevirimiçi Oyun Listesi" -#: builtin/mainmenu/tab_server.lua:35 -#, approved -msgid "Public" -msgstr "Herkese Açık" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "Mücadele modu" -#: builtin/mainmenu/tab_server.lua:45 -#, approved +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "Adresi doğrula" -#: builtin/mainmenu/tab_server.lua:47 -#, approved +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Ayarla" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Yaratıcı Mod" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Hasarı etkinleştir" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Kullanıcı adı/Şifre" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Yeni" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +#, fuzzy +msgid "No world created or selected!" +msgstr "Dünya seçilmedi ya da adlandırılmadı" + +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "Port" -#: builtin/mainmenu/tab_server.lua:51 -#, approved -msgid "Server Port" -msgstr "Sunucu portu" +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Herkese Açık" -#: builtin/mainmenu/tab_server.lua:174 -#, approved +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Dünya seç :" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "Sunucu Kur" -#: builtin/mainmenu/tab_settings.lua:23 -#, approved -msgid "" -"Are you sure to reset your singleplayer " -"world?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "Sunucu portu" + +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Oyunu Başlat" + +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -"Tek kişilik dünyayı sıfırlamak istediğinizden emin misiniz " -"?" -#, approved -msgid "No Filter" -msgstr "Süzme yok" - -#, approved -msgid "Bilinear Filter" -msgstr "İki yönlü süzme" - -#, approved -msgid "Trilinear Filter" -msgstr "Üç yönlü süzme" - -#, approved -msgid "No Mipmap" -msgstr "Mipmap kapalı" - -#, approved -msgid "Mipmap" -msgstr "Mipmap" - -#, approved -msgid "Mipmap Aniso. Filter" -msgstr "Mipmap Aniso. Süzgeci" - -#: builtin/mainmenu/tab_settings.lua:27 -#, approved -msgid "No!!!" -msgstr "Hayır!!!" - -#: builtin/mainmenu/tab_settings.lua:134 -#, approved -msgid "Smooth Lighting" -msgstr "Pürüzsüz ışıklandırma" - -#: builtin/mainmenu/tab_settings.lua:136 -#, approved -msgid "Enable Particles" -msgstr "Parçacıkları etkinleştir" - -#: builtin/mainmenu/tab_settings.lua:138 -#, approved -msgid "3D Clouds" -msgstr "3 boyutlu bulutlar" - -#, approved -msgid "Fancy Trees" -msgstr "Şık ağaçlar" - -#: builtin/mainmenu/tab_settings.lua:142 -#, approved -msgid "Opaque Water" -msgstr "Şeffaf su" - -#, approved -msgid "Connected Glass" -msgstr "İçiçe geçmiş cam" - -#: builtin/mainmenu/tab_settings.lua:149 -#, approved -msgid "" -"Restart minetest for driver change to take " -"effect" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -"Değişikliklerin etkin olabilmesi için minetesti yeniden " -"başlatın" -#: builtin/mainmenu/tab_settings.lua:151 -#, approved -msgid "Mip-Mapping" -msgstr "Mip-Mapping" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:153 -#, approved -msgid "Anisotropic Filtering" -msgstr "Eşyönsüz süzme" - -#: builtin/mainmenu/tab_settings.lua:155 -#, approved -msgid "Bi-Linear Filtering" -msgstr "Çift yönlü süzme" - -#, approved -msgid "Node Highlighting" -msgstr "Nesne seçme göstergesi" - -#, approved -msgid "Texturing:" -msgstr "Doku:" - -#, approved -msgid "Rendering:" -msgstr "Kaplama:" - -#: builtin/mainmenu/tab_settings.lua:157 -#, approved -msgid "Tri-Linear Filtering" -msgstr "Üç yönlü süzme" - -#: builtin/mainmenu/tab_settings.lua:160 -#, approved -msgid "Shaders" -msgstr "Shaders" - -#: builtin/mainmenu/tab_settings.lua:164 -#, approved +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Tuşları değiştir" -#: builtin/mainmenu/tab_settings.lua:167 -#, approved -msgid "Reset singleplayer world" -msgstr "Tek kişilik oyunu sıfırlayın" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Disabled" +msgstr "Paketi Kapat" -#: builtin/mainmenu/tab_settings.lua:171 -#, approved -msgid "GUI scale factor" -msgstr "Menü boyutları" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -#, approved -msgid "Scaling factor applied to menu elements: " -msgstr "Ölçeklendirme menülere işlendi:" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Enabled" +msgstr "Etkinleştirildi" -#: builtin/mainmenu/tab_settings.lua:181 -#, approved -msgid "Touch free target" -msgstr "Touch free target" - -#: builtin/mainmenu/tab_settings.lua:187 -#, approved -msgid "Touchthreshold (px)" -msgstr "Touchthreshold (px)" - -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 -#, approved -msgid "Bumpmapping" -msgstr "Engebeler" - -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -#, approved -msgid "Generate Normalmaps" -msgstr "Normal haritalar oluştur" - -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -#, approved -msgid "Parallax Occlusion" -msgstr "Parallax Occlusion" - -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -#, approved -msgid "Waving Water" -msgstr "Dalgalanan Su" - -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -#, approved -msgid "Waving Leaves" -msgstr "Dalgalanan Yapraklar" - -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -#, approved -msgid "Waving Plants" -msgstr "Dalgalanan Bitkiler" - -#: builtin/mainmenu/tab_settings.lua:255 -#, approved +#: builtin/mainmenu/tab_settings.lua msgid "" -"To enable shaders the OpenGL driver needs to be " -"used." -msgstr "OpenGL sürücüleri seçilmeden Shader etkinleştirilemez." +"Format: , , (, , ), , " +", " +msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 -#, approved +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Games" +msgstr "Oyun" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Seç" + +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Ayarlar" -#: builtin/mainmenu/tab_simple_main.lua:67 -#, approved -msgid "Fly mode" -msgstr "Uçuş modu" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -#, approved -msgid "Start Singleplayer" -msgstr "Tek kişilik oyunu başlat" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#, approved +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" msgstr "Eklentileri ayarla" -#: builtin/mainmenu/tab_simple_main.lua:191 -#, approved +#: builtin/mainmenu/tab_simple_main.lua msgid "Main" msgstr "Ana" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 -#, approved +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Tek kişilik oyunu başlat" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Oyna" -#: builtin/mainmenu/tab_singleplayer.lua:224 -#, approved +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Tek Kişilik" -#: builtin/mainmenu/tab_texturepacks.lua:49 -#, approved -msgid "Select texture pack:" -msgstr "Doku paketi seç :" - -#: builtin/mainmenu/tab_texturepacks.lua:69 -#, approved +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "Bilgi yok" -#: builtin/mainmenu/tab_texturepacks.lua:114 -#, approved +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Doku paketi seç :" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" msgstr "Doku paketi" -#: src/client.cpp:2726 -#, approved -msgid "Loading textures..." -msgstr "Dokular yükleniyor..." +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "Bağlantı hatası ( Zaman aşımı ? )" -#, approved -msgid "Rebuilding shaders..." -msgstr "Shader inşa ediliyor..." - -#, approved -msgid "Initializing nodes..." -msgstr "Nesneler yükleniyor..." - -#, approved -msgid "Item textures..." -msgstr "Nesne dokuları ..." - -#: src/fontengine.cpp:70 src/fontengine.cpp:226 -#, approved +#: src/client.cpp msgid "Done!" msgstr "Tamam!" -#, approved -msgid "Main Menu" -msgstr "Ana menu" +#: src/client.cpp +#, fuzzy +msgid "Initializing nodes" +msgstr "Nesneler yükleniyor..." -#, approved -msgid "Player name too long." -msgstr "Kullanıcı adı çok uzun." +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Nesneler yükleniyor..." -#, approved +#: src/client.cpp +msgid "Item textures..." +msgstr "Nesne dokuları ..." + +#: src/client.cpp +msgid "Loading textures..." +msgstr "Dokular yükleniyor..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Shader inşa ediliyor..." + +#: src/client/clientlauncher.cpp msgid "Connection error (timed out?)" msgstr "Bağlantı hatası ( Zaman aşımı ? )" -#, approved -msgid "No world selected and no address provided. Nothing to do." -msgstr "Dünya veya adres seçilmedi." - -#, approved -msgid "Provided world path doesn't exist: " -msgstr "Belirtilen dünya konumu yok:" - -#, approved +#: src/client/clientlauncher.cpp msgid "Could not find or load game \"" msgstr "Oyun yüklenemiyor \"" -#, approved +#: src/client/clientlauncher.cpp msgid "Invalid gamespec." msgstr "Geçersiz oyun özellikleri." -#, approved +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Ana menu" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Dünya veya adres seçilmedi." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Kullanıcı adı çok uzun." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "Belirtilen dünya konumu yok:" + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "needs_fallback_font" -#: src/game.cpp:1063 -#, approved -msgid "Proceed" -msgstr "Uygula" +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"Hata ayrıntıları için debug.txt dosyasını inceleyin." -#, approved -msgid "You died." -msgstr "Geberdin." +#: src/game.cpp +msgid "Change Keys" +msgstr "Tuşları değiştir" -#, approved -msgid "Respawn" -msgstr "Yeniden Canlan" +#: src/game.cpp +msgid "Change Password" +msgstr "Şifre değiştir" -#: src/game.cpp:2250 -#, approved +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Sunucuya bağlanılıyor..." + +#: src/game.cpp +msgid "Continue" +msgstr "Devam et" + +#: src/game.cpp +msgid "Creating client..." +msgstr "İstemci oluşturuluyor..." + +#: src/game.cpp +msgid "Creating server..." +msgstr "Sunucu oluşturuluyor..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Varsayılanlar Kontroller:\n" +"- WASD: Hareket et\n" +"- Boşluk: Zıpla/Tırman\n" +"- Shift: Sessiz yürü/Aşağı in\n" +"- Q: Elindekini bırak\n" +"- I: Envanter\n" +"- Fare: Dön/Bak\n" +"- Sol fare: Kaz/Vur\n" +"- Sağ fare: Yerleştir/Kullan\n" +"- Fare tekerleği: Araç seç\n" +"- T: Sohbet\n" + +#: src/game.cpp msgid "" "Default Controls:\n" "No menu visible:\n" @@ -801,623 +686,2921 @@ msgstr "" "- tut&bırak, iki parmağı kullan\n" " --> slotuna bir item bırak\n" -#, approved -msgid "" -"Default Controls:\n" -"- WASD: move\n" -"- Space: jump/climb\n" -"- Shift: sneak/go down\n" -"- Q: drop item\n" -"- I: inventory\n" -"- Mouse: turn/look\n" -"- Mouse left: dig/punch\n" -"- Mouse right: place/use\n" -"- Mouse wheel: select item\n" -"- T: chat\n" -msgstr "" -"Varsayılanlar Kontroller:\n" -"- WASD: Hareket et\n" -"- Boşluk: Zıpla/Tırman\n" -"- Shift: Sessiz yürü/Aşağı in\n" -"- Q: Elindekini bırak\n" -"- I: Envanter\n" -"- Fare: Dön/Bak\n" -"- Sol fare: Kaz/Vur\n" -"- Sağ fare: Yerleştir/Kullan\n" -"- Fare tekerleği: Araç seç\n" -"- T: Sohbet\n" - -#, approved -msgid "Continue" -msgstr "Devam et" - -#, approved -msgid "Change Password" -msgstr "Şifre değiştir" - -#, approved -msgid "Sound Volume" -msgstr "Ses yüksekliği :" - -#, approved -msgid "Change Keys" -msgstr "Tuşları değiştir" - -#, approved +#: src/game.cpp msgid "Exit to Menu" msgstr "Menüye dön" -#, approved +#: src/game.cpp msgid "Exit to OS" msgstr "Oyundan Çık" -#, approved -msgid "Shutting down..." -msgstr "Kapatılıyor..." - -#, approved -msgid "Loading..." -msgstr "Yükleniyor..." - -#, approved -msgid "Creating server..." -msgstr "Sunucu oluşturuluyor..." - -#, approved -msgid "Creating client..." -msgstr "İstemci oluşturuluyor..." - -#, approved -msgid "Resolving address..." -msgstr "Adres çözümleniyor..." - -#, approved -msgid "Connecting to server..." -msgstr "Sunucuya bağlanılıyor..." - -#, approved +#: src/game.cpp msgid "Item definitions..." msgstr "Nesne tanımlamaları..." -#: src/game.cpp:2255 -#, approved -msgid "Node definitions..." -msgstr "Blok tanımlamaları..." +#: src/game.cpp +msgid "KiB/s" +msgstr "" -#: src/game.cpp:2262 -#, approved +#: src/game.cpp msgid "Media..." msgstr "Media..." -#: src/game.cpp:2267 -#, approved -msgid " KB/s" -msgstr " KB/s" - -#: src/game.cpp:2271 -#, approved -msgid " MB/s" -msgstr " MB/s" - -#: src/game.cpp:4220 -#, approved -msgid "" -"\n" -"Check debug.txt for details." +#: src/game.cpp +msgid "MiB/s" msgstr "" -"\n" -"Hata ayrıntıları için debug.txt dosyasını inceleyin." -#: src/guiFormSpecMenu.cpp:2055 -#: src/guiFormSpecMenu.cpp:2846 -#, approved +#: src/game.cpp +msgid "Node definitions..." +msgstr "Blok tanımlamaları..." + +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "Uygula" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "Adres çözümleniyor..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Yeniden Canlan" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Kapatılıyor..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Ses yüksekliği :" + +#: src/game.cpp +msgid "You died." +msgstr "Geberdin." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "Entrer " -#: src/guiKeyChangeMenu.cpp:125 -#, approved -msgid "" -"Keybindings. (If this menu screws up, remove stuff from " -"minetest.conf)" -msgstr "Tuş ayaları. ( Olağandışı durumlarda minetest.conf 'u düzenleyin )" +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "tamam" -#: src/guiKeyChangeMenu.cpp:165 -#, approved +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "\"Kullan Tuşu\" = Aşağı in" -#: src/guiKeyChangeMenu.cpp:180 -#, approved -msgid "Double tap \"jump\" to toggle fly" -msgstr "Çift zıplayarak uçma modunu aç/kapa" - -#: src/guiKeyChangeMenu.cpp:296 -#, approved -msgid "Key already in use" -msgstr "Tuş zaten kullanımda" - -#: src/guiKeyChangeMenu.cpp:371 -#, approved -msgid "press key" -msgstr "tuşa bas" - -#: src/guiKeyChangeMenu.cpp:397 -#, approved -msgid "Forward" -msgstr "İleri" - -#: src/guiKeyChangeMenu.cpp:398 -#, approved +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "Geri" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 -#, approved -msgid "Left" -msgstr "Sol" - -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -#, approved -msgid "Right" -msgstr "Sağ" - -#: src/guiKeyChangeMenu.cpp:401 -#, approved -msgid "Use" -msgstr "Kullan" - -#: src/guiKeyChangeMenu.cpp:402 -#, approved -msgid "Jump" -msgstr "Zıpla" - -#: src/guiKeyChangeMenu.cpp:403 -#, approved -msgid "Sneak" -msgstr "Sessiz Yürü" - -#: src/guiKeyChangeMenu.cpp:404 -#, approved -msgid "Drop" -msgstr "Bırak" - -#: src/guiKeyChangeMenu.cpp:405 -#, approved -msgid "Inventory" -msgstr "Envanter" - -#: src/guiKeyChangeMenu.cpp:406 -#, approved +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "Konuşma" -#: src/guiKeyChangeMenu.cpp:407 -#, approved +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "Komut" -#: src/guiKeyChangeMenu.cpp:408 -#, approved +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "Konsol" -#: src/guiKeyChangeMenu.cpp:409 -#, approved -msgid "Toggle fly" -msgstr "Uçuş modu aç/kapa" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Çift zıplayarak uçma modunu aç/kapa" -#: src/guiKeyChangeMenu.cpp:410 -#, approved -msgid "Toggle fast" -msgstr "Hız modu aç/kapa" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Bırak" -#: src/guiKeyChangeMenu.cpp:411 -#, approved -msgid "Toggle noclip" -msgstr "Noclip aç/kapa" +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "İleri" -#: src/guiKeyChangeMenu.cpp:412 -#, approved -msgid "Range select" -msgstr "Uzaklık seçimi" +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Envanter" -#: src/guiKeyChangeMenu.cpp:413 -#, approved +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Zıpla" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Tuş zaten kullanımda" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "Tuş ayaları. ( Olağandışı durumlarda minetest.conf 'u düzenleyin )" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "Sol" + +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Yazdırma yığınları" -#: src/guiPasswordChange.cpp:106 -#, approved -msgid "Old Password" -msgstr "Eski şifre" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Uzaklık seçimi" -#: src/guiPasswordChange.cpp:122 -#, approved -msgid "New Password" -msgstr "Yeni şifre" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Sağ" -#: src/guiPasswordChange.cpp:137 -#, approved -msgid "Confirm Password" -msgstr "Şifreyi doğrulayın" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Sessiz Yürü" -#: src/guiPasswordChange.cpp:153 -#, approved +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Hız modu aç/kapa" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Hız modu aç/kapa" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Uçuş modu aç/kapa" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Noclip aç/kapa" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Kullan" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "tuşa bas" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Değiştir" -#: src/guiPasswordChange.cpp:162 -#, approved +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Şifreyi doğrulayın" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Yeni şifre" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Eski şifre" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Şifreler uyuşmuyor !" -#: src/guiVolumeChange.cpp:106 -#, approved -msgid "Sound Volume: " -msgstr "Ses yüksekliği :" - -#: src/guiVolumeChange.cpp:120 -#, approved +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Çıkış" -#: src/keycode.cpp:224 -#, approved -msgid "Left Button" -msgstr "Sol tuşu" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Ses yüksekliği :" -#: src/keycode.cpp:224 -#, approved -msgid "Middle Button" -msgstr "Orta Tuş" - -#: src/keycode.cpp:224 -#, approved -msgid "Right Button" -msgstr "Sağ tuş" - -#: src/keycode.cpp:224 -#, approved -msgid "X Button 1" -msgstr "X Button 1" - -#: src/keycode.cpp:225 -#, approved -msgid "Back" -msgstr "Geri" - -#: src/keycode.cpp:225 -#, approved -msgid "Clear" -msgstr "Temizle" - -#: src/keycode.cpp:225 -#, approved -msgid "Return" -msgstr "Return" - -#: src/keycode.cpp:225 -#, approved -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:225 -#, approved -msgid "X Button 2" -msgstr "X Button 2" - -#: src/keycode.cpp:226 -#, approved -msgid "Capital" -msgstr "Büyük" - -#: src/keycode.cpp:226 -#, approved -msgid "Control" -msgstr "Kontroller" - -#: src/keycode.cpp:226 -#, approved -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:226 -#, approved -msgid "Menu" -msgstr "Menü" - -#: src/keycode.cpp:226 -#, approved -msgid "Pause" -msgstr "Beklet" - -#: src/keycode.cpp:226 -#, approved -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:227 -#, approved -msgid "Convert" -msgstr "Dönüştür" - -#: src/keycode.cpp:227 -#, approved -msgid "Escape" -msgstr "Çıkış" - -#: src/keycode.cpp:227 -#, approved -msgid "Final" -msgstr "Bitiş" - -#: src/keycode.cpp:227 -#, approved -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -#, approved -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:227 -#, approved -msgid "Nonconvert" -msgstr "Dönüştürme" - -#: src/keycode.cpp:228 -#, approved -msgid "End" -msgstr "Son" - -#: src/keycode.cpp:228 -#, approved -msgid "Home" -msgstr "Ev" - -#: src/keycode.cpp:228 -#, approved -msgid "Mode Change" -msgstr "Mod değiştir" - -#: src/keycode.cpp:228 -#, approved -msgid "Next" -msgstr "İleri" - -#: src/keycode.cpp:228 -#, approved -msgid "Prior" -msgstr "Öncelikli" - -#: src/keycode.cpp:228 -#, approved -msgid "Space" -msgstr "Boşluk" - -#: src/keycode.cpp:229 -#, approved -msgid "Down" -msgstr "Aşağı" - -#: src/keycode.cpp:229 -#, approved -msgid "Execute" -msgstr "Çalıştır" - -#: src/keycode.cpp:229 -#, approved -msgid "Print" -msgstr "Yazdır" - -#: src/keycode.cpp:229 -#, approved -msgid "Select" -msgstr "Seç" - -#: src/keycode.cpp:229 -#, approved -msgid "Up" -msgstr "Yukarı" - -#: src/keycode.cpp:230 -#, approved -msgid "Help" -msgstr "Yardım" - -#: src/keycode.cpp:230 -#, approved -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:230 -#, approved -msgid "Snapshot" -msgstr "Ekran Resmi" - -#: src/keycode.cpp:233 -#, approved -msgid "Left Windows" -msgstr "Sol Windows tuşu" - -#: src/keycode.cpp:234 -#, approved +#: src/keycode.cpp msgid "Apps" msgstr "Uygulamalar" -#: src/keycode.cpp:234 -#, approved -msgid "Numpad 0" -msgstr "Numpad 0" - -#: src/keycode.cpp:234 -#, approved -msgid "Numpad 1" -msgstr "Numpad 1" - -#: src/keycode.cpp:234 -#, approved -msgid "Right Windows" -msgstr "Sağ Windows tuşu" - -#: src/keycode.cpp:234 -#, approved -msgid "Sleep" -msgstr "Uyu" - -#: src/keycode.cpp:235 -#, approved -msgid "Numpad 2" -msgstr "Numpad 2" - -#: src/keycode.cpp:235 -#, approved -msgid "Numpad 3" -msgstr "Numpad 3" - -#: src/keycode.cpp:235 -#, approved -msgid "Numpad 4" -msgstr "Numpad 4" - -#: src/keycode.cpp:235 -#, approved -msgid "Numpad 5" -msgstr "Numpad 5" - -#: src/keycode.cpp:235 -#, approved -msgid "Numpad 6" -msgstr "Numpad 6" - -#: src/keycode.cpp:235 -#, approved -msgid "Numpad 7" -msgstr "Numpad 7" - -#: src/keycode.cpp:236 -#, approved -msgid "Numpad *" -msgstr "Numpad *" - -msgid "Numpad +" -msgstr "Numpad +" - -#: src/keycode.cpp:236 -#, approved -msgid "Numpad " -msgstr "Numpad " - -msgid "Numpad -" -msgstr "Numpad -" - -#: src/keycode.cpp:236 -#, approved -msgid "Numpad /" -msgstr "Numpad /" - -#: src/keycode.cpp:236 -#, approved -msgid "Numpad 8" -msgstr "Numpad 8" - -#: src/keycode.cpp:236 -#, approved -msgid "Numpad 9" -msgstr "Numpad 9" - -#: src/keycode.cpp:240 -#, approved -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:240 -#, approved -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:241 -#, approved -msgid "Left Shift" -msgstr "Sol Shift" - -#: src/keycode.cpp:241 -#, approved -msgid "Right Shift" -msgstr "Sağ Shift" - -#: src/keycode.cpp:242 -#, approved -msgid "Left Control" -msgstr "Sol CTRL" - -#: src/keycode.cpp:242 -#, approved -msgid "Left Menu" -msgstr "Sol Menu" - -#: src/keycode.cpp:242 -#, approved -msgid "Right Control" -msgstr "Sağ CTRL" - -#: src/keycode.cpp:242 -#, approved -msgid "Right Menu" -msgstr "Sağ Menu" - -#: src/keycode.cpp:244 -#, approved -msgid "Comma" -msgstr "Virgul" - -#: src/keycode.cpp:244 -#, approved -msgid "Minus" -msgstr "Eksi" - -#: src/keycode.cpp:244 -#, approved -msgid "Period" -msgstr "Dönem" - -#: src/keycode.cpp:244 -#, approved -msgid "Plus" -msgstr "Artı" - -#: src/keycode.cpp:248 -#, approved +#: src/keycode.cpp msgid "Attn" msgstr "Dikkat" -#: src/keycode.cpp:248 -#, approved +#: src/keycode.cpp +msgid "Back" +msgstr "Geri" + +#: src/keycode.cpp +msgid "Capital" +msgstr "Büyük" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Temizle" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Virgul" + +#: src/keycode.cpp +msgid "Control" +msgstr "Kontroller" + +#: src/keycode.cpp +msgid "Convert" +msgstr "Dönüştür" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel" -#: src/keycode.cpp:249 -#, approved +#: src/keycode.cpp +msgid "Down" +msgstr "Aşağı" + +#: src/keycode.cpp +msgid "End" +msgstr "Son" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "l'OEF 'i sil" -#: src/keycode.cpp:249 -#, approved +#: src/keycode.cpp +msgid "Escape" +msgstr "Çıkış" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 -#, approved +#: src/keycode.cpp +msgid "Execute" +msgstr "Çalıştır" + +#: src/keycode.cpp +msgid "Final" +msgstr "Bitiş" + +#: src/keycode.cpp +msgid "Help" +msgstr "Yardım" + +#: src/keycode.cpp +msgid "Home" +msgstr "Ev" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "Kana" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Sol tuşu" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Sol CTRL" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Sol Menu" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Sol Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Sol Windows tuşu" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Menü" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Orta Tuş" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Eksi" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Mod değiştir" + +#: src/keycode.cpp +msgid "Next" +msgstr "İleri" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "Dönüştürme" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Numpad *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Numpad +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Numpad -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Numpad /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Numpad 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Numpad 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Numpad 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Numpad 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Numpad 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Numpad 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Numpad 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Numpad 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Numpad 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Numpad 9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Temizle" -#: src/keycode.cpp:249 -#, approved +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 -#, approved +#: src/keycode.cpp +msgid "Pause" +msgstr "Beklet" + +#: src/keycode.cpp +msgid "Period" +msgstr "Dönem" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Artı" + +#: src/keycode.cpp +msgid "Print" +msgstr "Yazdır" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Öncelikli" + +#: src/keycode.cpp +msgid "Return" +msgstr "Return" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Sağ tuş" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Sağ CTRL" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Sağ Menu" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Sağ Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Sağ Windows tuşu" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Seç" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Uyu" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Ekran Resmi" + +#: src/keycode.cpp +msgid "Space" +msgstr "Boşluk" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Yukarı" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X Button 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X Button 2" + +#: src/keycode.cpp msgid "Zoom" msgstr "Yakınlaştır" + +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "3 boyutlu bulutlar" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D mode" +msgstr "Uçuş modu" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Eşyönsüz süzme" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Geri" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Çift yönlü süzme" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Adresi doğrula" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "Engebeler" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Tuşları değiştir" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Tuşları değiştir" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Yaratıcı mod" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Yaratıcı mod" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "3 boyutlu bulutlar" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" +msgstr "Ana menu" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Komut" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "İçiçe geçmiş cam" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Sunucuya bağlanılıyor..." + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Konsol" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Konsol" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Konsol" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Kontroller" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Hasarı etkinleştir" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Yeni şifre" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Parçacıkları etkinleştir" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "Çift zıplayarak uçma modunu aç/kapa" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "Çift zıplayarak uçma modunu aç/kapa" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "Çevirimiçi eklenti deposu" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Hasarı etkinleştir" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "needs_fallback_font" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Süzme yok" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fly key" +msgstr "Uçuş modu" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "İleri" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "GUI scaling filter" +msgstr "Menü boyutları" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Generate normalmaps" +msgstr "Normal haritalar oluştur" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Paketi Kapat" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "Etkinleştirildi" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Oyun" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Envanter" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Zıpla" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Sol Menu" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Ana menu" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Ana menu" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Mapgen" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Menü" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "Mip-Mapping" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Node highlighting" +msgstr "Nesne seçme göstergesi" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion Scale" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion bias" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion iterations" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion mode" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion strength" +msgstr "Parallax Occlusion" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Player name" +msgstr "Kullanıcı adı çok uzun." + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Dokular yükleniyor..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Uzaklık seçimi" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Sağ Menu" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Ekran Resmi" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Tek kişilik oyunu başlat" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Sunucu Kur" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Sunucu portu" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "Sunucu portu" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Sunucu Kur" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Sunucu portu" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Çevirimiçi Oyun Listesi" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Çevirimiçi Oyun Listesi" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Shaders" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Pürüzsüz ışıklandırma" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Sessiz Yürü" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of generated normalmaps." +msgstr "Normal haritalar oluştur" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Doku paketi" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Üç yönlü süzme" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "tuşa bas" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "Ana geliştiriciler" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Ses yüksekliği :" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Walking speed" +msgstr "Dalgalanan Yapraklar" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving Nodes" +msgstr "Dalgalanan Yapraklar" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Dalgalanan Yapraklar" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving plants" +msgstr "Dalgalanan Bitkiler" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water" +msgstr "Dalgalanan Su" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water height" +msgstr "Dalgalanan Su" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water length" +msgstr "Dalgalanan Su" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water speed" +msgstr "Dalgalanan Su" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Rendering:" +#~ msgstr "Kaplama:" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "Değişikliklerin etkin olabilmesi için minetesti yeniden başlatın" + +#~ msgid "Numpad " +#~ msgstr "Numpad " + +#~ msgid " MB/s" +#~ msgstr " MB/s" + +#~ msgid " KB/s" +#~ msgstr " KB/s" + +#~ msgid "please wait..." +#~ msgstr "lütfen bekleyin..." + +#~ msgid "Downloading" +#~ msgstr "İndiriliyor" + +#~ msgid "Trilinear Filter" +#~ msgstr "Üç yönlü süzme" + +#~ msgid "Touchthreshold (px)" +#~ msgstr "Touchthreshold (px)" + +#~ msgid "Touch free target" +#~ msgstr "Touch free target" + +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "OpenGL sürücüleri seçilmeden Shader etkinleştirilemez." + +#~ msgid "Texturing:" +#~ msgstr "Doku:" + +#, fuzzy +#~ msgid "Simple Leaves" +#~ msgstr "Dalgalanan Yapraklar" + +#~ msgid "Scaling factor applied to menu elements: " +#~ msgstr "Ölçeklendirme menülere işlendi:" + +#~ msgid "Reset singleplayer world" +#~ msgstr "Tek kişilik oyunu sıfırlayın" + +#~ msgid "Opaque Water" +#~ msgstr "Şeffaf su" + +#, fuzzy +#~ msgid "Opaque Leaves" +#~ msgstr "Şeffaf su" + +#~ msgid "No!!!" +#~ msgstr "Hayır!!!" + +#~ msgid "No Mipmap" +#~ msgstr "Mipmap kapalı" + +#, fuzzy +#~ msgid "Mipmap + Aniso. Filter" +#~ msgstr "Mipmap Aniso. Süzgeci" + +#~ msgid "Mipmap" +#~ msgstr "Mipmap" + +#, fuzzy +#~ msgid "Fancy Leaves" +#~ msgstr "Şık ağaçlar" + +#~ msgid "Bilinear Filter" +#~ msgstr "İki yönlü süzme" + +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr "Tek kişilik dünyayı sıfırlamak istediğinizden emin misiniz ?" \ No newline at end of file diff --git a/po/uk/minetest.po b/po/uk/minetest.po index f503948e..773df14a 100644 --- a/po/uk/minetest.po +++ b/po/uk/minetest.po @@ -7,554 +7,602 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" -"PO-Revision-Date: 2013-06-27 01:22+0200\n" -"Last-Translator: Vladimir a \n" -"Language-Team: LANGUAGE \n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-09-21 23:18+0200\n" +"Last-Translator: Olexandr \n" +"Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 1.4-dev\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 2.4\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "Трапилася помилка у Lua-скрипті модифікації:" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "Трапилася помилка:" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "Головне меню" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" +msgstr "Гаразд" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "Повторне підключення" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:26 -#, fuzzy -msgid "World:" -msgstr "Виберіть світ:" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "Завантаження..." -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 +#: builtin/mainmenu/common.lua #, fuzzy -msgid "Hide Game" -msgstr "Гра" +msgid "Protocol version mismatch. " +msgstr "Неспівпадіння версій протоколу, сервер: " -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 -#, fuzzy +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" +"Спробуйте оновити список публічних серверів та перевірте своє Інтернет-" +"з'єднання." + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Cancel" +msgstr "Скасувати" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua msgid "Depends:" -msgstr "залежить від:" +msgstr "Залежить від:" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable MP" +msgstr "Вимкнути багатокористувацьку гру" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "Увімкнути багатокористувацьку гру" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable all" +msgstr "Увімкнути все" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" +"Не вдалося ввімкнути mod \"$1\", бо він містить заборонені символи. " +"Дозволяється використання таких символів: [a-z0-9_]." + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "Приховати гру" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "Приховати контент багатокористувацької гри" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Модифікація:" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp msgid "Save" msgstr "Зберегти" -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 -msgid "Cancel" -msgstr "Відміна" +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "Світ:" -#: builtin/mainmenu/dlg_config_world.lua:68 -#, fuzzy -msgid "Enable MP" -msgstr "Увімкнути Все" - -#: builtin/mainmenu/dlg_config_world.lua:70 -#, fuzzy -msgid "Disable MP" -msgstr "Вимкнути Усе" - -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 +#: builtin/mainmenu/dlg_config_world.lua msgid "enabled" msgstr "Увімкнено" -#: builtin/mainmenu/dlg_config_world.lua:82 -#, fuzzy -msgid "Enable all" -msgstr "Увімкнути Все" +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "Світ з такою назвою ( \"$1\") вже існує" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "Назва Світу" - -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "Гра" - -#: builtin/mainmenu/dlg_create_world.lua:63 +#: builtin/mainmenu/dlg_create_world.lua msgid "Create" msgstr "Створити" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "" - -#: builtin/mainmenu/dlg_create_world.lua:73 +#: builtin/mainmenu/dlg_create_world.lua msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "" +msgstr "Завантажте гру, наприклад, minetest_game з minetest.net" -#: builtin/mainmenu/dlg_create_world.lua:97 -#, fuzzy -msgid "A world named \"$1\" already exists" -msgstr "Неможливо створити світ: Світ з таким ім'ям вже існує" +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "Завантажте з minetest.net" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "Гра" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "Генератор карти" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" -msgstr "" +msgstr "Назву світу не задано або не обрано гру" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "Зерно" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "Увага: мінімальна тестова версія призначена для розробників." + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "Назва Світу" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "Ви не маєте встановлених ігор." + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" -msgstr "" +msgstr "Ви впевнені, що бажаєте видалити \"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Modmgr: failed to delete \"$1\"" +msgstr "Modmgr: не вдалося видалити \"$1\"" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Modmgr: invalid modpath \"$1\"" +msgstr "Modmgr: недійсний шлях модифікації \"$1\"" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "Ні, звісно ні!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua msgid "Yes" msgstr "Так" -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 -msgid "Modmgr: failed to delete \"$1\"" -msgstr "" - -#: builtin/mainmenu/dlg_delete_mod.lua:45 -msgid "Modmgr: invalid modpath \"$1\"" -msgstr "" - -#: builtin/mainmenu/dlg_delete_world.lua:24 -#, fuzzy +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" -msgstr "Видалити світ" +msgstr "Видалити світ \"$1\"?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "Ні" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp +msgid "Accept" +msgstr "Прийняти" + +#: builtin/mainmenu/dlg_rename_modpack.lua msgid "Rename Modpack:" msgstr "" -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 -#, fuzzy -msgid "Accept" -msgstr "Підтвердити" - -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" -msgstr "" - -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua msgid "" "\n" "Install Mod: unsupported filetype \"$1\" or broken archive" msgstr "" +"\n" +"Встановлення модифікації: тип файлу \"$1\" не підтримується або архів " +"пошкоджено" -#: builtin/mainmenu/modmgr.lua:363 -#, fuzzy +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" -msgstr "Не вдалося ініціалізувати світ" +msgstr "Не вдалося встановити $1 у $2" -#: builtin/mainmenu/modmgr.lua:366 +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "Встановлення модифікації: файл \"$1\"" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "" +"Встановлення модифікації: не вдається знайти дійсну назву модифікації $1" + +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find suitable foldername for modpack $1" msgstr "" -#: builtin/mainmenu/modmgr.lua:386 -msgid "Install Mod: unable to find real modname for: $1" -msgstr "" - -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "" - -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 -msgid "Search" -msgstr "" - -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "Вниз" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "" - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "" - -#: builtin/mainmenu/store.lua:163 -#, fuzzy -msgid "Shortname:" -msgstr "Назва Світу" - -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "" - -#: builtin/mainmenu/store.lua:476 -msgid "Rating" -msgstr "" - -#: builtin/mainmenu/store.lua:501 -msgid "re-Install" -msgstr "" - -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "" - -#: builtin/mainmenu/store.lua:522 +#: builtin/mainmenu/store.lua msgid "Close store" -msgstr "" +msgstr "Вийти з крамнички" -#: builtin/mainmenu/store.lua:530 +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "Завантаження $1, зачекайте..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "Встановити" + +#: builtin/mainmenu/store.lua msgid "Page $1 of $2" -msgstr "" +msgstr "Сторінка $1 із $2" -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "Подяка" +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "Оцінка" -#: builtin/mainmenu/tab_credits.lua:29 +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "Пошук" + +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "Коротке ім'я:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "Успішно встановлено:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "Невідсортоване" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "Перевстановити" + +#: builtin/mainmenu/tab_credits.lua +msgid "Active Contributors" +msgstr "Активні учасники" + +#: builtin/mainmenu/tab_credits.lua msgid "Core Developers" msgstr "" -#: builtin/mainmenu/tab_credits.lua:43 -msgid "Active Contributors" -msgstr "" +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "Подяка" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" -msgstr "" +msgstr "Встановлені модифікації:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" -msgstr "" +msgstr "Інформація модифікації:" -#: builtin/mainmenu/tab_mods.lua:93 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua +msgid "Mods" +msgstr "Модифікації" + +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "Опис модифікації відсутній" + +#: builtin/mainmenu/tab_mods.lua msgid "Rename" -msgstr "" +msgstr "Перейменувати" -#: builtin/mainmenu/tab_mods.lua:95 +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "Оберіть файл модифікації:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "Видалити обрану модифікацію" + +#: builtin/mainmenu/tab_mods.lua msgid "Uninstall selected modpack" msgstr "" -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Address / Port :" +msgstr "Адреса / Порт :" -#: builtin/mainmenu/tab_mods.lua:121 -#, fuzzy -msgid "Select Mod File:" -msgstr "Виберіть світ:" +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp +msgid "Client" +msgstr "Клієнт" -#: builtin/mainmenu/tab_mods.lua:165 -msgid "Mods" -msgstr "" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "Під'єднатися" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" -msgstr "Адреса/Порт" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "Режим творчості" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "Ім'я/Пароль" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "Ушкодження увімкнено" -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -#, fuzzy -msgid "Public Serverlist" -msgstr "Список публічних серверів:" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Delete" msgstr "Видалити" -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "Підключитися" +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "Ім'я / Пароль :" -#: builtin/mainmenu/tab_multiplayer.lua:252 -msgid "Client" -msgstr "" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "Список публічних серверів" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "Новий" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "PvP увімкнено" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -msgid "Configure" -msgstr "Налаштувати" - -#: builtin/mainmenu/tab_server.lua:29 -#, fuzzy -msgid "Start Game" -msgstr "Почати гру / Підключитися" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "Виберіть світ:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" -msgstr "Режим Створення" - -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" -msgstr "Ввімкнути урон" - -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "Публичний" - -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "" -#: builtin/mainmenu/tab_server.lua:47 -msgid "Port" -msgstr "" +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "Налаштувати" -#: builtin/mainmenu/tab_server.lua:51 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "Режим Створення" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "Увімкнути ушкодження" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "Ім'я/Пароль" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "Новий" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "Світ не створено або не обрано!" + +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "Порт" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "Публічний" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "Виберіть світ:" + +#: builtin/mainmenu/tab_server.lua +msgid "Server" +msgstr "Сервер" + +#: builtin/mainmenu/tab_server.lua msgid "Server Port" msgstr "" -#: builtin/mainmenu/tab_server.lua:174 -msgid "Server" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "Почати гру" + +#: builtin/mainmenu/tab_settings.lua +msgid "\"" msgstr "" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" msgstr "" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" msgstr "" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" -msgstr "Рівне освітлення" - -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" -msgstr "Ввімкнути частки" - -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" -msgstr "3D Хмари" - -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "Гарні дерева" - -#: builtin/mainmenu/tab_settings.lua:142 -#, fuzzy -msgid "Opaque Water" -msgstr "Непрозора вода" - -#: builtin/mainmenu/tab_settings.lua:144 -#, fuzzy -msgid "Connected Glass" -msgstr "Підключитися" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "MIP-текстурування" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "Анізотропна фільтрація" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "Білінійна фільтрація" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "Трилінійна фільтрація" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "Шейдери" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "Змінити клавіши" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Reset singleplayer world" -msgstr "Одиночна гра" +msgid "Disabled" +msgstr "Вимкнути багатокористувацьку гру" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" -msgstr "" - -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Bumpmapping" -msgstr "MIP-текстурування" +msgid "Enabled" +msgstr "Увімкнено" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Games" +msgstr "Гра" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." msgstr "" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "Обрати" + +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "Налаштування" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -#, fuzzy -msgid "Start Singleplayer" -msgstr "Одиночна гра" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 -#, fuzzy +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua msgid "Config mods" -msgstr "Налаштувати" +msgstr "Налаштувати модифікації" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "Головне Меню" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "Почати однокористувацьку гру" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "Грати" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "Одиночна гра" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" -msgstr "" +msgstr "Інформація відсутня" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "Нічого" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "Оберіть набір текстур:" + +#: builtin/mainmenu/tab_texturepacks.lua msgid "Texturepacks" -msgstr "" +msgstr "Набори текстур" -#: src/client.cpp:2726 +#: src/client.cpp +msgid "Connection timed out." +msgstr "Час очікування вийшов." + +#: src/client.cpp +msgid "Done!" +msgstr "Виконано!" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "Ініціалізація вузлів" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "Ініціалізація вузлів..." + +#: src/client.cpp msgid "Item textures..." msgstr "Текстура предметів..." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +msgid "Loading textures..." +msgstr "Завантаження текстур..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "Побудова шейдерів..." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "Помилка з'єднання (час вийшов?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "Неможливо знайти або завантажити гру \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "Помилкова конфігурація гри." + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "Головне Меню" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "Жоден світ не вибрано та не надано адреси. Нічого робити." + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "Ім'я гравця надто довге." + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "Вказаний шлях до світу не існує: " + +#: src/fontengine.cpp msgid "needs_fallback_font" msgstr "" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "Народитися" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "" - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "" - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "" - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." @@ -562,596 +610,3022 @@ msgstr "" "\n" "Деталі у файлі debug.txt." -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +msgid "Change Keys" +msgstr "Змінити клавіші" + +#: src/game.cpp +msgid "Change Password" +msgstr "Змінити Пароль" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "Підключення до сервера..." + +#: src/game.cpp +msgid "Continue" +msgstr "Продовжити" + +#: src/game.cpp +msgid "Creating client..." +msgstr "Створення клієнта..." + +#: src/game.cpp +msgid "Creating server..." +msgstr "Створення сервера..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"Управління за замовчанням:\n" +"- WASD: рух\n" +"- Space: стрибок/лізти в гору\n" +"- Shift: крастися/лізти в низ\n" +"- Q: кинути предмет\n" +"- I: інвентар\n" +"- Мишка: поворот/дивитися\n" +"- Ліва клавіша миші: копати/удар\n" +"- Права клавіша миші: поставити/використовувати\n" +"- Колесо миші: вибір предмета\n" +"- T: чат\n" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" +"Керування за замовчуванням:\n" +"Коли меню не відображається:\n" +"- один дотик: активувати кнопку\n" +"- дотикнутися двічі: встановити/використати\n" +"- провести пальцем: роззирнутися\n" +"Коли відображається меню або інвертар:\n" +"- дотикнутися двічі (поза межами):\n" +" --> закрити\n" +"- Торкнутися купи, торкнутися комірки:\n" +" --> перемістити купу\n" +"- Торкнутися і тягнути, дотикнутися лругим пальцем\n" +" --> помістити один предмет у комірку\n" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "Вихід в меню" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "Вихід з гри" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "Визначення предметів..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "" + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "" + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "Далі" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "Отримання адреси..." + +#: src/game.cpp +msgid "Respawn" +msgstr "Народитися" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "Вимкнення..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "Гучність звуку" + +#: src/game.cpp +msgid "You died." +msgstr "Ви загинули." + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "" -#: src/guiKeyChangeMenu.cpp:125 +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "" + +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "\"Use\" = climb down" +msgstr "\"Використовувати\" = підніматися в гору" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "Назад" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "Чат" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "Комманда" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "Консоль" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "Подвійний \"Стрибок\" щоб полетіти" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "Викинути" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "Уперед" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "Інвентар" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "Стрибок" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "Клавіша вже використовується" + +#: src/guiKeyChangeMenu.cpp msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" msgstr "" "Комбінації клавіш. (Якщо це меню зламалося, видаліть налаштування з minetest." "conf)" -#: src/guiKeyChangeMenu.cpp:165 -#, fuzzy -msgid "\"Use\" = climb down" -msgstr "\"Використовувати\" = підніматися в гору" - -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "Подвійний \"Стрибок\" щоб полетіти" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "Клавіша вже використовується" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "Натисніть клавішу" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "Уперед" - -#: src/guiKeyChangeMenu.cpp:398 -msgid "Backward" -msgstr "Назад" - -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Left" msgstr "Ліворуч" -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "Праворуч" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "Використовувати" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "Стрибок" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "Крастися" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "Викинути" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "Інвентар" - -#: src/guiKeyChangeMenu.cpp:406 -msgid "Chat" -msgstr "Чат" - -#: src/guiKeyChangeMenu.cpp:407 -msgid "Command" -msgstr "Комманда" - -#: src/guiKeyChangeMenu.cpp:408 -msgid "Console" -msgstr "Консоль" - -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "Переключити режим польоту" - -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "Переключити швидкий режим" - -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "Переключити режим проходження скрізь стін" - -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "Вибір діапазону" - -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "Надрукувати стек" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" -msgstr "Старий Пароль" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "Вибір діапазону" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" -msgstr "Новий Пароль" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "Праворуч" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" -msgstr "Підтвердження нового пароля" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "Крастися" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "Toggle Cinematic" +msgstr "Переключити швидкий режим" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "Переключити швидкий режим" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "Переключити режим польоту" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "Переключити режим проходження скрізь стін" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "Використовувати" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "Натисніть клавішу" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "Змінити" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "Підтвердження нового пароля" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "Новий Пароль" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "Старий Пароль" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "Паролі не збігаються!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "Гучність Звуку: " - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "Вихід" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "Ліва кнопка" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "Гучність Звуку: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "Середня кнопка" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "Права кнопка" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "Додаткова кнопка 1" - -#: src/keycode.cpp:225 -#, fuzzy -msgid "Back" -msgstr "Назад" - -#: src/keycode.cpp:225 -#, fuzzy -msgid "Clear" -msgstr "Clear" - -#: src/keycode.cpp:225 -#, fuzzy -msgid "Return" -msgstr "Enter" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tab" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "Додаткова кнопка 2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "Caps Lock" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Ctrl" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "Kana" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "Меню" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "Пауза" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Shift" - -#: src/keycode.cpp:227 -#, fuzzy -msgid "Convert" -msgstr "Конвертувати" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Esc" - -#: src/keycode.cpp:227 -#, fuzzy -msgid "Final" -msgstr "Кинець" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Kanji" - -#: src/keycode.cpp:227 -#, fuzzy -msgid "Nonconvert" -msgstr "Не конвертуванно" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "End" - -#: src/keycode.cpp:228 -#, fuzzy -msgid "Home" -msgstr "Home" - -#: src/keycode.cpp:228 -#, fuzzy -msgid "Mode Change" -msgstr "Mode" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "Page Up" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Page Down" - -#: src/keycode.cpp:228 -#, fuzzy -msgid "Space" -msgstr "Space" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "Вниз" - -#: src/keycode.cpp:229 -#, fuzzy -msgid "Execute" -msgstr "Виконати" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "Print Screen" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "Select" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "Вгору" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "Допомога" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "Insert" - -#: src/keycode.cpp:230 -#, fuzzy -msgid "Snapshot" -msgstr "Знімок" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "Ліва клавіша Win (Command)" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "Додатки" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "Num 0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "Num 1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "Права клавіша Win (Command)" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "Сон" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "Num 2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "Num 3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "Num 4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "Num 5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "Num 6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "Num 7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "Num *" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "Num +" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "Num -" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "Num /" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "Num 8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "Num 9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "Num Lock" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Scroll Lock" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "Ліва клавіша Shift" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "Права клавіша Shift" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "Ліва клавіша Control" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "Ліва клавіша Menu" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "Права клавіша Control" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "Права клавіша Menu" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "Кома" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "Мінус" - -#: src/keycode.cpp:244 -#, fuzzy -msgid "Period" -msgstr "Період" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "Плюс" - -#: src/keycode.cpp:248 +#: src/keycode.cpp #, fuzzy msgid "Attn" msgstr "Увага" -#: src/keycode.cpp:248 -msgid "CrSel" -msgstr "CrSel" +#: src/keycode.cpp +#, fuzzy +msgid "Back" +msgstr "Назад" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Capital" +msgstr "Caps Lock" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Очистити" + +#: src/keycode.cpp +msgid "Comma" +msgstr "Кома" + +#: src/keycode.cpp +msgid "Control" +msgstr "Ctrl" + +#: src/keycode.cpp +#, fuzzy +msgid "Convert" +msgstr "Конвертувати" + +#: src/keycode.cpp +msgid "CrSel" +msgstr "" + +#: src/keycode.cpp +msgid "Down" +msgstr "Вниз" + +#: src/keycode.cpp +msgid "End" +msgstr "Кінець" + +#: src/keycode.cpp #, fuzzy msgid "Erase OEF" msgstr "Erase OEF" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Esc" + +#: src/keycode.cpp #, fuzzy msgid "ExSel" msgstr "ExSel" -#: src/keycode.cpp:249 -#, fuzzy -msgid "OEM Clear" -msgstr "OEM Очистити" +#: src/keycode.cpp +msgid "Execute" +msgstr "Виконати" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Final" +msgstr "Кінець" + +#: src/keycode.cpp +msgid "Help" +msgstr "Допомога" + +#: src/keycode.cpp +#, fuzzy +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "Insert" + +#: src/keycode.cpp +msgid "Junja" +msgstr "" + +#: src/keycode.cpp +msgid "Kana" +msgstr "" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "Ліва кнопка" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "Ліва клавіша Control" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "Ліва клавіша Menu" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "Ліва клавіша Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "Ліва клавіша Win (Command)" + +#: src/keycode.cpp +msgid "Menu" +msgstr "Меню" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "Середня кнопка" + +#: src/keycode.cpp +msgid "Minus" +msgstr "Мінус" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "Змінити режим" + +#: src/keycode.cpp +msgid "Next" +msgstr "Page Up" + +#: src/keycode.cpp +#, fuzzy +msgid "Nonconvert" +msgstr "Не конвертуванно" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "Num *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "Num +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "Num -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "Num /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "Num 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "Num 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "Num 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "Num 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "Num 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "Num 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "Num 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "Num 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "Num 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "Num 9" + +#: src/keycode.cpp +msgid "OEM Clear" +msgstr "Очистити OEM" + +#: src/keycode.cpp msgid "PA1" msgstr "PA1" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "Пауза" + +#: src/keycode.cpp +msgid "Period" +msgstr "Крапка" + +#: src/keycode.cpp +msgid "Plus" +msgstr "Плюс" + +#: src/keycode.cpp +msgid "Print" +msgstr "Print Screen" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Page Down" + +#: src/keycode.cpp +#, fuzzy +msgid "Return" +msgstr "Enter" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "Права кнопка" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "Права клавіша Control" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "Права клавіша Menu" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "Права клавіша Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "Права клавіша Win (Command)" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "Обрати" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "Сон" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "Знімок" + +#: src/keycode.cpp +#, fuzzy +msgid "Space" +msgstr "Space" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "Вгору" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "Додаткова кнопка 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "Додаткова кнопка 2" + +#: src/keycode.cpp #, fuzzy msgid "Zoom" msgstr "Збільшити" -#: src/main.cpp:1681 -msgid "Main Menu" -msgstr "Головне Меню" - -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." msgstr "" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "Помилка з'єднання (час вийшов?)" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "3D Хмари" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "Жоден світ не вибрано та не надано адреси. Нічого не робити." - -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " +#: src/settings_translation_file.cpp +msgid "3D mode" msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "Неможливо знайти, або завантажити гру \"" +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "Помилкова конфігурація гри." +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "Додатково" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "Анізотропна фільтрація" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "Назад" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "Білінійна фільтрація" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "Отримання адреси..." + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Build inside player" +msgstr "Мережева гра" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bumpmapping" +msgstr "MIP-текстурування" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "Змінити клавіши" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "Змінити клавіши" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "Режим творчості" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "Режим творчості" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "3D Хмари" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" +msgstr "Головне меню" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "Комманда" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "Підключитися" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "Підключення до сервера..." + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "Консоль" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "Консоль" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "Консоль" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Ctrl" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "Увімкнути ушкодження" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "Новий Пароль" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "Ввімкнути частки" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "Подвійний \"Стрибок\" щоб полетіти" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "Подвійний \"Стрибок\" щоб полетіти" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "Увімкнути ушкодження" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "Анізотропна фільтрація" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "Уперед" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "GUI scaling filter" +msgstr "Масштаб інтерфейсу" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Generate normalmaps" +msgstr "Генерувати карти нормалей" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "Вимкнути багатокористувацьку гру" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "Увімкнено" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "Гра" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "Інвентар" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "Стрибок" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "Ліва клавіша Menu" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "Головне меню" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "Головне меню" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "Генератор карти" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "Генератор карти" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "Генератор карти" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "Генератор карти" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "Генератор карти" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "Генератор карти" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "Меню" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "MIP-текстурування" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "Оклюзія паралакса" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion" +msgstr "Оклюзія паралакса" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion Scale" +msgstr "Оклюзія паралакса" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion bias" +msgstr "Оклюзія паралакса" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion iterations" +msgstr "Оклюзія паралакса" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion mode" +msgstr "Оклюзія паралакса" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion strength" +msgstr "Оклюзія паралакса" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Player name" +msgstr "Ім'я гравця надто довге." + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "Завантаження текстур..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "Вибір діапазону" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "Права клавіша Menu" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "Знімок" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "Почати однокористувацьку гру" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "Сервер" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "Сервер" + +#: src/settings_translation_file.cpp +msgid "Server description" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "Сервер" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "Сервер" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "Список публічних серверів" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "Список публічних серверів" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "Шейдери" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "Рівне освітлення" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "Крастися" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of generated normalmaps." +msgstr "Генерувати карти нормалей" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "Набори текстур" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "Трилінійна фільтрація" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "Натисніть клавішу" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "Гучність звуку" + +#: src/settings_translation_file.cpp +msgid "Walking speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving Nodes" +msgstr "Ініціалізація вузлів" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "Гарне листя" + +#: src/settings_translation_file.cpp +msgid "Waving plants" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water length" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Waving water speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#, fuzzy +#~ msgid "Game Name" +#~ msgstr "Гра" + +#~ msgid "Favorites:" +#~ msgstr "Улюблені:" + +#, fuzzy +#~ msgid "Password" +#~ msgstr "Старий Пароль" + +#~ msgid "Preload item visuals" +#~ msgstr "Попереднє завантаження зображень" + +#, fuzzy +#~ msgid "Finite Liquid" +#~ msgstr "Кінцеві рідини" + +#~ msgid "Failed to delete all world files" +#~ msgstr "Помилка при видаленні файлів світу" + +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "Неможливо налаштувати світ: Нічого не вибрано" + +#~ msgid "Cannot create world: No games found" +#~ msgstr "Неможливо створити світ: Не знайдено жодної гри" + +#~ msgid "Files to be deleted" +#~ msgstr "Файлів, що підлягають видаленню" + +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "Неможливо видалити світ: Нічого не вибрано" + +#~ msgid "Address required." +#~ msgstr "Адреса необхідна." + +#~ msgid "Create world" +#~ msgstr "Створити світ" + +#~ msgid "Leave address blank to start a local server." +#~ msgstr "Залишіть адресу незаповненою для створення локального серверу." + +#~ msgid "Show Favorites" +#~ msgstr "Показати Улюблені" + +#~ msgid "Show Public" +#~ msgstr "Показати Публічні" + +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "Неможливо створити світ: Ім'я містить недопустимі символи" + +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "Попередження: Помилкова конфігурація. " + +#~ msgid "Configuration saved. " +#~ msgstr "Налаштування Збережено. " + +#~ msgid "is required by:" +#~ msgstr "необхідний для:" #~ msgid "Left click: Move all items, Right click: Move single item" #~ msgstr "" #~ "Ліва кнопка миші: Перемістити усі предмети, Права кнопка миші: " #~ "Перемістити один предмет" -#~ msgid "is required by:" -#~ msgstr "необхідний для:" - -#~ msgid "Configuration saved. " -#~ msgstr "Налаштування Збережено. " - -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "Попередження: Помилкова конфігурація. " - -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "Неможливо створити світ: Ім'я містить недопустимі символи" - -#~ msgid "Multiplayer" -#~ msgstr "Мережева гра" - -#~ msgid "Advanced" -#~ msgstr "Додатково" - -#~ msgid "Show Public" -#~ msgstr "Показати Публічні" - -#~ msgid "Show Favorites" -#~ msgstr "Показати Улюблені" - -#~ msgid "Leave address blank to start a local server." -#~ msgstr "Залишіть адресу незаповненою для створення локального серверу." - -#~ msgid "Create world" -#~ msgstr "Створити світ" - -#~ msgid "Address required." -#~ msgstr "Адреса необхідна." - -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "Неможливо видалити світ: Нічого не вибрано" - -#~ msgid "Files to be deleted" -#~ msgstr "Файлів, що підлягають видаленню" - -#~ msgid "Cannot create world: No games found" -#~ msgstr "Неможливо створити світ: Не знайдено жодної гри" - -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "Неможливо налаштувати світ: Нічого не вибрано" - -#~ msgid "Failed to delete all world files" -#~ msgstr "Помилка при видаленні файлів світу" - #, fuzzy -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" +#~ msgid "Downloading" +#~ msgstr "Вниз" + +#~ msgid "To enable shaders the OpenGL driver needs to be used." #~ msgstr "" -#~ "Управління за замовчанню:\n" -#~ "- WASD: рух\n" -#~ "- Space: стрибок/лізти в гору\n" -#~ "- Shift: крастися/лізти в низ\n" -#~ "- Q: кинути предмет\n" -#~ "- I: інвентар\n" -#~ "- Мишка: поворот/дивитися\n" -#~ "- Ліва клавіша миші: копати/удар\n" -#~ "- Права клавіша миші: поставити/використовувати\n" -#~ "- Колесо миші: вибір предмета\n" -#~ "- T: чат\n" +#~ "Для того, щоб увімкнути шейдери, потрібно використовувати двайвер OpenGL." -#~ msgid "Exit to OS" -#~ msgstr "Вихід з гри" +#~ msgid "Texturing:" +#~ msgstr "Текстурування:" -#~ msgid "Exit to Menu" -#~ msgstr "Вихід в меню" +#~ msgid "Simple Leaves" +#~ msgstr "Просте листя" -#~ msgid "Sound Volume" -#~ msgstr "Гучність звуку" +#~ msgid "Scaling factor applied to menu elements: " +#~ msgstr "Масштабування елементів меню: " -#~ msgid "Change Password" -#~ msgstr "Змінити Пароль" +#~ msgid "Reset singleplayer world" +#~ msgstr "Скинути світ однокористувацької гри" -#~ msgid "Continue" -#~ msgstr "Продовжити" +#~ msgid "Opaque Water" +#~ msgstr "Непрозора вода" -#~ msgid "You died." -#~ msgstr "Ви загинули." +#~ msgid "Opaque Leaves" +#~ msgstr "Непрозоре листя" -#~ msgid "Connecting to server..." -#~ msgstr "Підключення до сервера..." +#~ msgid "No!!!" +#~ msgstr "Ні!!!" -#~ msgid "Resolving address..." -#~ msgstr "Отримання адреси..." - -#~ msgid "Creating client..." -#~ msgstr "Створення клієнта..." - -#~ msgid "Creating server...." -#~ msgstr "Створення сервера..." - -#~ msgid "Loading..." -#~ msgstr "Завантаження..." - -#, fuzzy -#~ msgid "Finite Liquid" -#~ msgstr "Кінцеві рідини" - -#~ msgid "Preload item visuals" -#~ msgstr "Попереднє завантаження зображень" - -#, fuzzy -#~ msgid "Password" -#~ msgstr "Старий Пароль" - -#~ msgid "Favorites:" -#~ msgstr "Улюблені:" - -#, fuzzy -#~ msgid "Games" -#~ msgstr "Гра" - -#, fuzzy -#~ msgid "Game Name" -#~ msgstr "Гра" +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr "Ви впевнені, що бажаєте скинути свій світ однокористувацької гри?" diff --git a/po/zh_CN/minetest.po b/po/zh_CN/minetest.po index 1ce307b8..dadf8cef 100644 --- a/po/zh_CN/minetest.po +++ b/po/zh_CN/minetest.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: minetest\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-12-13 15:24+0100\n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" "PO-Revision-Date: 2015-04-19 02:00+0800\n" "Last-Translator: Ang Weijie \n" "Language-Team: LANGUAGE \n" @@ -18,147 +18,194 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 1.7-dev\n" -#: builtin/fstk/ui.lua:67 +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "" + +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Main menu" +msgstr "主菜单" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua msgid "Ok" msgstr "确定" -#: builtin/mainmenu/dlg_config_world.lua:26 -msgid "World:" -msgstr "世界:" +#: builtin/fstk/ui.lua +#, fuzzy +msgid "Reconnect" +msgstr "连接" -#: builtin/mainmenu/dlg_config_world.lua:30 -#: builtin/mainmenu/dlg_config_world.lua:32 -msgid "Hide Game" -msgstr "隐藏游戏" +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:36 -#: builtin/mainmenu/dlg_config_world.lua:38 -msgid "Hide mp content" -msgstr "隐藏MOD包内容" +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "载入中..." -#: builtin/mainmenu/dlg_config_world.lua:46 -msgid "Mod:" -msgstr "MOD:" +#: builtin/mainmenu/common.lua +msgid "Protocol version mismatch. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:48 -msgid "Depends:" -msgstr "依赖于:" +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:51 src/guiKeyChangeMenu.cpp:191 -msgid "Save" -msgstr "保存" +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" -#: builtin/mainmenu/dlg_config_world.lua:52 -#: builtin/mainmenu/dlg_create_world.lua:64 -#: builtin/mainmenu/dlg_rename_modpack.lua:33 src/guiKeyChangeMenu.cpp:199 -#: src/keycode.cpp:224 +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp msgid "Cancel" msgstr "取消" -#: builtin/mainmenu/dlg_config_world.lua:68 -msgid "Enable MP" -msgstr "启用MOD包" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "依赖于:" -#: builtin/mainmenu/dlg_config_world.lua:70 +#: builtin/mainmenu/dlg_config_world.lua msgid "Disable MP" msgstr "禁用MOD包" -#: builtin/mainmenu/dlg_config_world.lua:74 -#: builtin/mainmenu/dlg_config_world.lua:76 -msgid "enabled" -msgstr "启用" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "启用MOD包" -#: builtin/mainmenu/dlg_config_world.lua:82 +#: builtin/mainmenu/dlg_config_world.lua msgid "Enable all" msgstr "全部启用" -#: builtin/mainmenu/dlg_create_world.lua:50 -msgid "World name" -msgstr "世界名称" +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" -#: builtin/mainmenu/dlg_create_world.lua:53 -msgid "Seed" -msgstr "种子" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "隐藏游戏" -#: builtin/mainmenu/dlg_create_world.lua:56 -msgid "Mapgen" -msgstr "地图生成器" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "隐藏MOD包内容" -#: builtin/mainmenu/dlg_create_world.lua:59 -msgid "Game" -msgstr "游戏" +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "MOD:" -#: builtin/mainmenu/dlg_create_world.lua:63 -msgid "Create" -msgstr "创建" +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "保存" -#: builtin/mainmenu/dlg_create_world.lua:68 -msgid "You have no subgames installed." -msgstr "你没有安装任何游戏" +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "世界:" -#: builtin/mainmenu/dlg_create_world.lua:69 -msgid "Download one from minetest.net" -msgstr "从minetest.net下载一个" +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "启用" -#: builtin/mainmenu/dlg_create_world.lua:72 -msgid "Warning: The minimal development test is meant for developers." -msgstr "警告: 甚微发展测试只是为了开发人员" - -#: builtin/mainmenu/dlg_create_world.lua:73 -msgid "Download a subgame, such as minetest_game, from minetest.net" -msgstr "从minetest.net下载一个游戏,例如:minetest_game" - -#: builtin/mainmenu/dlg_create_world.lua:97 +#: builtin/mainmenu/dlg_create_world.lua msgid "A world named \"$1\" already exists" msgstr "名为 \"$1\" 的世界已经存在" -#: builtin/mainmenu/dlg_create_world.lua:116 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "创建" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "从minetest.net下载一个游戏,例如:minetest_game" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "从minetest.net下载一个" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "游戏" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "地图生成器" + +#: builtin/mainmenu/dlg_create_world.lua msgid "No worldname given or no game selected" msgstr "未给定世界名或未选择游戏" -#: builtin/mainmenu/dlg_delete_mod.lua:26 +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "种子" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "警告: 最小化开发测试为开发人员所使用。" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "世界名称" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "你没有安装任何游戏" + +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Are you sure you want to delete \"$1\"?" msgstr "你确认要删除\"$1\"?" -#: builtin/mainmenu/dlg_delete_mod.lua:27 -#: builtin/mainmenu/dlg_delete_world.lua:25 -#: builtin/mainmenu/tab_settings.lua:25 -msgid "Yes" -msgstr "是" - -#: builtin/mainmenu/dlg_delete_mod.lua:28 -msgid "No of course not!" -msgstr "当然不!" - -#: builtin/mainmenu/dlg_delete_mod.lua:41 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: failed to delete \"$1\"" msgstr "MOD管理器:无法删除“$1“" -#: builtin/mainmenu/dlg_delete_mod.lua:45 +#: builtin/mainmenu/dlg_delete_mod.lua msgid "Modmgr: invalid modpath \"$1\"" msgstr "MOD管理器:MOD“$1“路径非法" -#: builtin/mainmenu/dlg_delete_world.lua:24 +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "当然不!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "是" + +#: builtin/mainmenu/dlg_delete_world.lua msgid "Delete World \"$1\"?" msgstr "删除世界“$1”?" -#: builtin/mainmenu/dlg_delete_world.lua:26 +#: builtin/mainmenu/dlg_delete_world.lua msgid "No" msgstr "否" -#: builtin/mainmenu/dlg_rename_modpack.lua:26 -msgid "Rename Modpack:" -msgstr "重命名MOD包:" - -#: builtin/mainmenu/dlg_rename_modpack.lua:31 src/keycode.cpp:228 +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp msgid "Accept" msgstr "接受" -#: builtin/mainmenu/modmgr.lua:342 -msgid "Install Mod: file: \"$1\"" -msgstr "安装MOD:文件:”$1“" +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "重命名MOD包:" -#: builtin/mainmenu/modmgr.lua:343 +#: builtin/mainmenu/modmgr.lua #, fuzzy msgid "" "\n" @@ -167,383 +214,403 @@ msgstr "" "\n" "安装MOD:不支持的文件类型“$1“" -#: builtin/mainmenu/modmgr.lua:363 +#: builtin/mainmenu/modmgr.lua msgid "Failed to install $1 to $2" msgstr "无法安装$1到$2" -#: builtin/mainmenu/modmgr.lua:366 -msgid "Install Mod: unable to find suitable foldername for modpack $1" -msgstr "安装MOD:找不到MOD包$1的合适文件夹名" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "安装MOD:文件:”$1“" -#: builtin/mainmenu/modmgr.lua:386 +#: builtin/mainmenu/modmgr.lua msgid "Install Mod: unable to find real modname for: $1" msgstr "安装MOD:找不到$1的真正MOD名" -#: builtin/mainmenu/store.lua:88 -msgid "Unsorted" -msgstr "未分类" +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" +msgstr "安装MOD:找不到MOD包$1的合适文件夹名" -#: builtin/mainmenu/store.lua:99 builtin/mainmenu/store.lua:584 +#: builtin/mainmenu/store.lua +msgid "Close store" +msgstr "关闭商店" + +#: builtin/mainmenu/store.lua +#, fuzzy +msgid "Downloading $1, please wait..." +msgstr "请稍候..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "安装" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "第$1页,共$2页" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "评级" + +#: builtin/mainmenu/store.lua msgid "Search" msgstr "搜索" -#: builtin/mainmenu/store.lua:125 -#, fuzzy -msgid "Downloading" -msgstr "下载中" - -#: builtin/mainmenu/store.lua:127 -msgid "please wait..." -msgstr "请稍候..." - -#: builtin/mainmenu/store.lua:159 -msgid "Successfully installed:" -msgstr "成功的安装:" - -#: builtin/mainmenu/store.lua:163 +#: builtin/mainmenu/store.lua #, fuzzy msgid "Shortname:" msgstr "短名称" -#: builtin/mainmenu/store.lua:167 src/guiFormSpecMenu.cpp:2866 -msgid "ok" -msgstr "确定" +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "成功的安装:" -#: builtin/mainmenu/store.lua:476 -msgid "Rating" -msgstr "评级" +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "未分类" -#: builtin/mainmenu/store.lua:501 +#: builtin/mainmenu/store.lua msgid "re-Install" msgstr "重新安装" -#: builtin/mainmenu/store.lua:503 -msgid "Install" -msgstr "安装" - -#: builtin/mainmenu/store.lua:522 -msgid "Close store" -msgstr "关闭店" - -#: builtin/mainmenu/store.lua:530 -msgid "Page $1 of $2" -msgstr "第$1页,共$2页" - -#: builtin/mainmenu/tab_credits.lua:22 -msgid "Credits" -msgstr "归功" - -#: builtin/mainmenu/tab_credits.lua:29 -msgid "Core Developers" -msgstr "内部开发人员" - -#: builtin/mainmenu/tab_credits.lua:43 +#: builtin/mainmenu/tab_credits.lua msgid "Active Contributors" msgstr "积极贡献者" -#: builtin/mainmenu/tab_credits.lua:48 +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "内部开发人员" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "归功" + +#: builtin/mainmenu/tab_credits.lua msgid "Previous Contributors" msgstr "前贡献者" -#: builtin/mainmenu/tab_mods.lua:30 +#: builtin/mainmenu/tab_credits.lua +#, fuzzy +msgid "Previous Core Developers" +msgstr "内部开发人员" + +#: builtin/mainmenu/tab_mods.lua msgid "Installed Mods:" msgstr "已安装的MOD:" -#: builtin/mainmenu/tab_mods.lua:39 -msgid "Online mod repository" -msgstr "网上MOD库" - -#: builtin/mainmenu/tab_mods.lua:78 -msgid "No mod description available" -msgstr "无MOD资料可得" - -#: builtin/mainmenu/tab_mods.lua:82 +#: builtin/mainmenu/tab_mods.lua msgid "Mod information:" msgstr "MOD资料:" -#: builtin/mainmenu/tab_mods.lua:93 -msgid "Rename" -msgstr "改名" - -#: builtin/mainmenu/tab_mods.lua:95 -msgid "Uninstall selected modpack" -msgstr "删除选中的MOD包" - -#: builtin/mainmenu/tab_mods.lua:106 -msgid "Uninstall selected mod" -msgstr "删除选中的MOD" - -#: builtin/mainmenu/tab_mods.lua:121 -msgid "Select Mod File:" -msgstr "选择MOD文件:" - -#: builtin/mainmenu/tab_mods.lua:165 +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua msgid "Mods" msgstr "MODS" -#: builtin/mainmenu/tab_multiplayer.lua:23 -msgid "Address/Port" +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "无MOD资料可得" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "改名" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "选择MOD文件:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "删除选中的MOD" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "删除选中的MOD包" + +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Address / Port :" msgstr "地址/端口" -#: builtin/mainmenu/tab_multiplayer.lua:24 builtin/mainmenu/tab_server.lua:37 -#: builtin/mainmenu/tab_simple_main.lua:25 -msgid "Name/Password" -msgstr "名字/密码" - -#: builtin/mainmenu/tab_multiplayer.lua:29 -#: builtin/mainmenu/tab_simple_main.lua:30 -msgid "Public Serverlist" -msgstr "公共服务器列表" - -#: builtin/mainmenu/tab_multiplayer.lua:34 builtin/mainmenu/tab_server.lua:26 -#: builtin/mainmenu/tab_singleplayer.lua:85 src/keycode.cpp:230 -msgid "Delete" -msgstr "删除" - -#: builtin/mainmenu/tab_multiplayer.lua:38 -#: builtin/mainmenu/tab_simple_main.lua:34 -msgid "Connect" -msgstr "连接" - -#: builtin/mainmenu/tab_multiplayer.lua:252 +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp msgid "Client" msgstr "客户端" -#: builtin/mainmenu/tab_server.lua:27 builtin/mainmenu/tab_singleplayer.lua:86 -msgid "New" -msgstr "新建" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "连接" -#: builtin/mainmenu/tab_server.lua:28 builtin/mainmenu/tab_singleplayer.lua:87 -msgid "Configure" -msgstr "配置" - -#: builtin/mainmenu/tab_server.lua:29 -msgid "Start Game" -msgstr "启动游戏" - -#: builtin/mainmenu/tab_server.lua:30 builtin/mainmenu/tab_singleplayer.lua:89 -msgid "Select World:" -msgstr "选择世界:" - -#: builtin/mainmenu/tab_server.lua:31 builtin/mainmenu/tab_simple_main.lua:63 -#: builtin/mainmenu/tab_singleplayer.lua:90 -msgid "Creative Mode" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Creative mode" msgstr "创造模式" -#: builtin/mainmenu/tab_server.lua:33 builtin/mainmenu/tab_simple_main.lua:65 -#: builtin/mainmenu/tab_singleplayer.lua:92 -msgid "Enable Damage" -msgstr "开启伤害风险" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Damage enabled" +msgstr "启用" -#: builtin/mainmenu/tab_server.lua:35 -msgid "Public" -msgstr "公共服务器" +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "删除" -#: builtin/mainmenu/tab_server.lua:45 +#: builtin/mainmenu/tab_multiplayer.lua +#, fuzzy +msgid "Name / Password :" +msgstr "名字/密码" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "公共服务器列表" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "PvP enabled" +msgstr "启用" + +#: builtin/mainmenu/tab_server.lua msgid "Bind Address" msgstr "绑定地址" -#: builtin/mainmenu/tab_server.lua:47 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "配置" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "创造模式" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "开启伤害风险" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "名字/密码" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "新建" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +#, fuzzy +msgid "No world created or selected!" +msgstr "未给定世界名或未选择游戏" + +#: builtin/mainmenu/tab_server.lua msgid "Port" msgstr "端口" -#: builtin/mainmenu/tab_server.lua:51 -msgid "Server Port" -msgstr "服务器端口" +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "公共服务器" -#: builtin/mainmenu/tab_server.lua:174 +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "选择世界:" + +#: builtin/mainmenu/tab_server.lua msgid "Server" msgstr "服务器" -#: builtin/mainmenu/tab_settings.lua:23 -msgid "Are you sure to reset your singleplayer world?" -msgstr "你确定要重置您的单人世界吗?" +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "服务器端口" -#: builtin/mainmenu/tab_settings.lua:27 -msgid "No!!!" -msgstr "不!!!" +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "启动游戏" -#: builtin/mainmenu/tab_settings.lua:134 -msgid "Smooth Lighting" -msgstr "平滑光照" +#: builtin/mainmenu/tab_settings.lua +msgid "\"" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:136 -msgid "Enable Particles" -msgstr "启用粒子效果" +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:138 -msgid "3D Clouds" -msgstr "三维云彩" +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" +msgstr "" -#: builtin/mainmenu/tab_settings.lua:140 -#, fuzzy -msgid "Fancy Trees" -msgstr "花式树" - -#: builtin/mainmenu/tab_settings.lua:142 -msgid "Opaque Water" -msgstr "不透明的水" - -#: builtin/mainmenu/tab_settings.lua:144 -#, fuzzy -msgid "Connected Glass" -msgstr "连接的玻璃" - -#: builtin/mainmenu/tab_settings.lua:149 -msgid "Restart minetest for driver change to take effect" -msgstr "重启minetest让驱动变化生效" - -#: builtin/mainmenu/tab_settings.lua:151 -msgid "Mip-Mapping" -msgstr "贴图处理" - -#: builtin/mainmenu/tab_settings.lua:153 -msgid "Anisotropic Filtering" -msgstr "各向异性过滤" - -#: builtin/mainmenu/tab_settings.lua:155 -msgid "Bi-Linear Filtering" -msgstr "双线性过滤" - -#: builtin/mainmenu/tab_settings.lua:157 -msgid "Tri-Linear Filtering" -msgstr "三线性过滤" - -#: builtin/mainmenu/tab_settings.lua:160 -msgid "Shaders" -msgstr "着色器" - -#: builtin/mainmenu/tab_settings.lua:164 +#: builtin/mainmenu/tab_settings.lua msgid "Change keys" msgstr "改变键位设置" -#: builtin/mainmenu/tab_settings.lua:167 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Reset singleplayer world" -msgstr "重置单人游戏" +msgid "Disabled" +msgstr "禁用MOD包" -#: builtin/mainmenu/tab_settings.lua:171 -msgid "GUI scale factor" -msgstr "GUI缩放因子" - -#: builtin/mainmenu/tab_settings.lua:175 -msgid "Scaling factor applied to menu elements: " -msgstr "菜单元素应用缩放因子" - -#: builtin/mainmenu/tab_settings.lua:181 -msgid "Touch free target" -msgstr "自由触摸目标" - -#: builtin/mainmenu/tab_settings.lua:187 -msgid "Touchthreshold (px)" +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" msgstr "" -#: builtin/mainmenu/tab_settings.lua:194 builtin/mainmenu/tab_settings.lua:208 +#: builtin/mainmenu/tab_settings.lua #, fuzzy -msgid "Bumpmapping" -msgstr "贴图处理" +msgid "Enabled" +msgstr "启用" -#: builtin/mainmenu/tab_settings.lua:196 builtin/mainmenu/tab_settings.lua:209 -msgid "Generate Normalmaps" -msgstr "产生法线贴图" - -#: builtin/mainmenu/tab_settings.lua:198 builtin/mainmenu/tab_settings.lua:210 -msgid "Parallax Occlusion" +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " msgstr "" -#: builtin/mainmenu/tab_settings.lua:200 builtin/mainmenu/tab_settings.lua:211 -msgid "Waving Water" -msgstr "摇动的水" +#: builtin/mainmenu/tab_settings.lua +msgid "Games" +msgstr "游戏" -#: builtin/mainmenu/tab_settings.lua:202 builtin/mainmenu/tab_settings.lua:212 -msgid "Waving Leaves" -msgstr "摇动的叶子" +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:204 builtin/mainmenu/tab_settings.lua:213 -msgid "Waving Plants" -msgstr "摇动的植物" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:255 -msgid "To enable shaders the OpenGL driver needs to be used." -msgstr "启用着色器需要使用OpenGL驱动。" +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." +msgstr "" -#: builtin/mainmenu/tab_settings.lua:330 +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "选择" + +#: builtin/mainmenu/tab_settings.lua msgid "Settings" msgstr "设置" -#: builtin/mainmenu/tab_simple_main.lua:67 -msgid "Fly mode" -msgstr "飞行模式" +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:71 -#, fuzzy -msgid "Start Singleplayer" -msgstr "单人游戏" +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" -#: builtin/mainmenu/tab_simple_main.lua:72 +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Config mods" msgstr "配置MOD" -#: builtin/mainmenu/tab_simple_main.lua:191 +#: builtin/mainmenu/tab_simple_main.lua #, fuzzy msgid "Main" msgstr "主菜单" -#: builtin/mainmenu/tab_singleplayer.lua:88 src/keycode.cpp:249 +#: builtin/mainmenu/tab_simple_main.lua +#, fuzzy +msgid "Start Singleplayer" +msgstr "单人游戏" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp msgid "Play" msgstr "开始游戏" -#: builtin/mainmenu/tab_singleplayer.lua:224 +#: builtin/mainmenu/tab_singleplayer.lua msgid "Singleplayer" msgstr "单人游戏" -#: builtin/mainmenu/tab_texturepacks.lua:49 -msgid "Select texture pack:" -msgstr "选择材质包:" - -#: builtin/mainmenu/tab_texturepacks.lua:69 +#: builtin/mainmenu/tab_texturepacks.lua msgid "No information available" msgstr "无资料可得" -#: builtin/mainmenu/tab_texturepacks.lua:114 +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "选择材质包:" + +#: builtin/mainmenu/tab_texturepacks.lua #, fuzzy msgid "Texturepacks" msgstr "材质包" -#: src/client.cpp:2726 +#: src/client.cpp +#, fuzzy +msgid "Connection timed out." +msgstr "连接出错(超时?)" + +#: src/client.cpp +msgid "Done!" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "" + +#: src/client.cpp msgid "Item textures..." msgstr "物品材质..." -#: src/fontengine.cpp:70 src/fontengine.cpp:226 +#: src/client.cpp +#, fuzzy +msgid "Loading textures..." +msgstr "载入中..." + +#: src/client.cpp +#, fuzzy +msgid "Rebuilding shaders..." +msgstr "正在解析地址..." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "连接出错(超时?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "无法找到或载入游戏模式" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "非法游戏模式规格。" + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "主菜单" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "没有选择世界或提供地址。未执行操作。" + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "玩家的名字太长了" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "提供世界地址不存在" + +#: src/fontengine.cpp msgid "needs_fallback_font" -msgstr "" +msgstr "yes" -#: src/game.cpp:1063 -msgid "Respawn" -msgstr "重生" - -#: src/game.cpp:2250 -msgid "Item definitions..." -msgstr "物品定义..." - -#: src/game.cpp:2255 -msgid "Node definitions..." -msgstr "方块定义..." - -#: src/game.cpp:2262 -msgid "Media..." -msgstr "媒体..." - -#: src/game.cpp:2267 -msgid " KB/s" -msgstr "千字节/秒" - -#: src/game.cpp:2271 -msgid " MB/s" -msgstr "兆字节/秒" - -#: src/game.cpp:4220 +#: src/game.cpp msgid "" "\n" "Check debug.txt for details." @@ -551,496 +618,2999 @@ msgstr "" "\n" "查看 debug.txt 以获得详细信息。" -#: src/guiFormSpecMenu.cpp:2055 +#: src/game.cpp +#, fuzzy +msgid "Change Keys" +msgstr "改变键位设置" + +#: src/game.cpp +msgid "Change Password" +msgstr "更改密码" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "正在连接服务器..." + +#: src/game.cpp +msgid "Continue" +msgstr "继续" + +#: src/game.cpp +msgid "Creating client..." +msgstr "正在建立客户端..." + +#: src/game.cpp +#, fuzzy +msgid "Creating server..." +msgstr "正在建立服务器...." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"默认控制:\n" +"W/A/S/D: 移动\n" +"空格: 跳/爬\n" +"Shift: 潜行/向下\n" +"Q: 丢物品\n" +"I: 物品栏\n" +"鼠标:转身/环顾\n" +"鼠标左键: 挖\n" +"鼠标右键: 放/使用\n" +"鼠标滚轮: 选择物品\n" +"T: 聊天\n" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "退出至菜单" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "退出至操作系统" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "物品定义..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "" + +#: src/game.cpp +msgid "Media..." +msgstr "媒体..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "方块定义..." + +#: src/game.cpp src/guiFormSpecMenu.cpp msgid "Proceed" msgstr "继续" -#: src/guiFormSpecMenu.cpp:2846 +#: src/game.cpp +msgid "Resolving address..." +msgstr "正在解析地址..." + +#: src/game.cpp +msgid "Respawn" +msgstr "重生" + +#: src/game.cpp +#, fuzzy +msgid "Shutting down..." +msgstr "关闭中......" + +#: src/game.cpp +msgid "Sound Volume" +msgstr "音量" + +#: src/game.cpp +msgid "You died." +msgstr "你死了。" + +#: src/guiFormSpecMenu.cpp msgid "Enter " msgstr "输入" -#: src/guiKeyChangeMenu.cpp:125 -msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" -msgstr "键位配置。(如果这个菜单被弄乱,从minetest.conf中删掉点东西)" +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "确定" -#: src/guiKeyChangeMenu.cpp:165 +#: src/guiKeyChangeMenu.cpp msgid "\"Use\" = climb down" msgstr "“使用” = 向下爬" -#: src/guiKeyChangeMenu.cpp:180 -msgid "Double tap \"jump\" to toggle fly" -msgstr "连按两次“跳”切换飞行模式" - -#: src/guiKeyChangeMenu.cpp:296 -msgid "Key already in use" -msgstr "按键已被占用" - -#: src/guiKeyChangeMenu.cpp:371 -msgid "press key" -msgstr "按键" - -#: src/guiKeyChangeMenu.cpp:397 -msgid "Forward" -msgstr "向前" - -#: src/guiKeyChangeMenu.cpp:398 +#: src/guiKeyChangeMenu.cpp msgid "Backward" msgstr "向后" -#: src/guiKeyChangeMenu.cpp:399 src/keycode.cpp:229 -msgid "Left" -msgstr "向左" - -#: src/guiKeyChangeMenu.cpp:400 src/keycode.cpp:229 -msgid "Right" -msgstr "向右" - -#: src/guiKeyChangeMenu.cpp:401 -msgid "Use" -msgstr "使用" - -#: src/guiKeyChangeMenu.cpp:402 -msgid "Jump" -msgstr "跳" - -#: src/guiKeyChangeMenu.cpp:403 -msgid "Sneak" -msgstr "潜行" - -#: src/guiKeyChangeMenu.cpp:404 -msgid "Drop" -msgstr "丢出" - -#: src/guiKeyChangeMenu.cpp:405 -msgid "Inventory" -msgstr "物品栏" - -#: src/guiKeyChangeMenu.cpp:406 +#: src/guiKeyChangeMenu.cpp msgid "Chat" msgstr "聊天" -#: src/guiKeyChangeMenu.cpp:407 +#: src/guiKeyChangeMenu.cpp msgid "Command" msgstr "命令" -#: src/guiKeyChangeMenu.cpp:408 +#: src/guiKeyChangeMenu.cpp msgid "Console" msgstr "控制台" -#: src/guiKeyChangeMenu.cpp:409 -msgid "Toggle fly" -msgstr "切换飞行模式" +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "连按两次“跳”切换飞行模式" -#: src/guiKeyChangeMenu.cpp:410 -msgid "Toggle fast" -msgstr "切换快速移动模式" +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "丢出" -#: src/guiKeyChangeMenu.cpp:411 -msgid "Toggle noclip" -msgstr "切换穿墙模式" +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "向前" -#: src/guiKeyChangeMenu.cpp:412 -msgid "Range select" -msgstr "选择范围" +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "物品栏" -#: src/guiKeyChangeMenu.cpp:413 +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "跳" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "按键已被占用" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "键位配置。(如果这个菜单被弄乱,从minetest.conf中删掉点东西)" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "向左" + +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp msgid "Print stacks" msgstr "打印栈" -#: src/guiPasswordChange.cpp:106 -msgid "Old Password" -msgstr "旧密码" +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "选择范围" -#: src/guiPasswordChange.cpp:122 -msgid "New Password" -msgstr "新密码" +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "向右" -#: src/guiPasswordChange.cpp:137 -msgid "Confirm Password" -msgstr "确认密码" +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "潜行" -#: src/guiPasswordChange.cpp:153 +#: src/guiKeyChangeMenu.cpp +#, fuzzy +msgid "Toggle Cinematic" +msgstr "切换快速移动模式" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "切换快速移动模式" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "切换飞行模式" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "切换穿墙模式" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "使用" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "按键" + +#: src/guiPasswordChange.cpp msgid "Change" msgstr "更改" -#: src/guiPasswordChange.cpp:162 +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "确认密码" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "新密码" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "旧密码" + +#: src/guiPasswordChange.cpp msgid "Passwords do not match!" msgstr "密码不匹配!" -#: src/guiVolumeChange.cpp:106 -msgid "Sound Volume: " -msgstr "音量: " - -#: src/guiVolumeChange.cpp:120 +#: src/guiVolumeChange.cpp msgid "Exit" msgstr "退出" -#: src/keycode.cpp:224 -msgid "Left Button" -msgstr "左键" +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "音量: " -#: src/keycode.cpp:224 -msgid "Middle Button" -msgstr "中键" - -#: src/keycode.cpp:224 -msgid "Right Button" -msgstr "右键" - -#: src/keycode.cpp:224 -msgid "X Button 1" -msgstr "X键1" - -#: src/keycode.cpp:225 -msgid "Back" -msgstr "退格" - -#: src/keycode.cpp:225 -msgid "Clear" -msgstr "Clear键" - -#: src/keycode.cpp:225 -msgid "Return" -msgstr "回车" - -#: src/keycode.cpp:225 -msgid "Tab" -msgstr "Tab键" - -#: src/keycode.cpp:225 -msgid "X Button 2" -msgstr "X键2" - -#: src/keycode.cpp:226 -msgid "Capital" -msgstr "大写" - -#: src/keycode.cpp:226 -msgid "Control" -msgstr "Ctrl键" - -#: src/keycode.cpp:226 -msgid "Kana" -msgstr "假名" - -#: src/keycode.cpp:226 -msgid "Menu" -msgstr "菜单" - -#: src/keycode.cpp:226 -msgid "Pause" -msgstr "暂停" - -#: src/keycode.cpp:226 -msgid "Shift" -msgstr "Shift键" - -#: src/keycode.cpp:227 -msgid "Convert" -msgstr "转换" - -#: src/keycode.cpp:227 -msgid "Escape" -msgstr "Escape键" - -#: src/keycode.cpp:227 -msgid "Final" -msgstr "Final键" - -#: src/keycode.cpp:227 -msgid "Junja" -msgstr "Junja键" - -#: src/keycode.cpp:227 -msgid "Kanji" -msgstr "Kanji键" - -#: src/keycode.cpp:227 -msgid "Nonconvert" -msgstr "无变换" - -#: src/keycode.cpp:228 -msgid "End" -msgstr "End键" - -#: src/keycode.cpp:228 -msgid "Home" -msgstr "Home键" - -#: src/keycode.cpp:228 -msgid "Mode Change" -msgstr "改变模式" - -#: src/keycode.cpp:228 -msgid "Next" -msgstr "下一个" - -#: src/keycode.cpp:228 -msgid "Prior" -msgstr "Prior键" - -#: src/keycode.cpp:228 -msgid "Space" -msgstr "空格" - -#: src/keycode.cpp:229 -msgid "Down" -msgstr "向下" - -#: src/keycode.cpp:229 -msgid "Execute" -msgstr "执行" - -#: src/keycode.cpp:229 -msgid "Print" -msgstr "打印" - -#: src/keycode.cpp:229 -msgid "Select" -msgstr "选择" - -#: src/keycode.cpp:229 -msgid "Up" -msgstr "向上" - -#: src/keycode.cpp:230 -msgid "Help" -msgstr "帮助" - -#: src/keycode.cpp:230 -msgid "Insert" -msgstr "插入" - -#: src/keycode.cpp:230 -msgid "Snapshot" -msgstr "快照" - -#: src/keycode.cpp:233 -msgid "Left Windows" -msgstr "左窗口" - -#: src/keycode.cpp:234 +#: src/keycode.cpp msgid "Apps" msgstr "应用" -#: src/keycode.cpp:234 -msgid "Numpad 0" -msgstr "小键盘0" - -#: src/keycode.cpp:234 -msgid "Numpad 1" -msgstr "小键盘1" - -#: src/keycode.cpp:234 -msgid "Right Windows" -msgstr "右窗口" - -#: src/keycode.cpp:234 -msgid "Sleep" -msgstr "睡眠" - -#: src/keycode.cpp:235 -msgid "Numpad 2" -msgstr "小键盘2" - -#: src/keycode.cpp:235 -msgid "Numpad 3" -msgstr "小键盘3" - -#: src/keycode.cpp:235 -msgid "Numpad 4" -msgstr "小键盘4" - -#: src/keycode.cpp:235 -msgid "Numpad 5" -msgstr "小键盘5" - -#: src/keycode.cpp:235 -msgid "Numpad 6" -msgstr "小键盘6" - -#: src/keycode.cpp:235 -msgid "Numpad 7" -msgstr "小键盘7" - -#: src/keycode.cpp:236 -msgid "Numpad *" -msgstr "小键盘*" - -#: src/keycode.cpp:236 -msgid "Numpad +" -msgstr "小键盘+" - -#: src/keycode.cpp:236 -msgid "Numpad -" -msgstr "小键盘-" - -#: src/keycode.cpp:236 -msgid "Numpad /" -msgstr "小键盘/" - -#: src/keycode.cpp:236 -msgid "Numpad 8" -msgstr "小键盘8" - -#: src/keycode.cpp:236 -msgid "Numpad 9" -msgstr "小键盘9" - -#: src/keycode.cpp:240 -msgid "Num Lock" -msgstr "小键盘锁" - -#: src/keycode.cpp:240 -msgid "Scroll Lock" -msgstr "Scroll Lock键" - -#: src/keycode.cpp:241 -msgid "Left Shift" -msgstr "左Shift键" - -#: src/keycode.cpp:241 -msgid "Right Shift" -msgstr "右Shift键" - -#: src/keycode.cpp:242 -msgid "Left Control" -msgstr "左Control键" - -#: src/keycode.cpp:242 -msgid "Left Menu" -msgstr "左菜单" - -#: src/keycode.cpp:242 -msgid "Right Control" -msgstr "右Control键" - -#: src/keycode.cpp:242 -msgid "Right Menu" -msgstr "右菜单" - -#: src/keycode.cpp:244 -msgid "Comma" -msgstr "逗号" - -#: src/keycode.cpp:244 -msgid "Minus" -msgstr "减号" - -#: src/keycode.cpp:244 -msgid "Period" -msgstr "句号" - -#: src/keycode.cpp:244 -msgid "Plus" -msgstr "加号" - -#: src/keycode.cpp:248 +#: src/keycode.cpp msgid "Attn" msgstr "Attn键" -#: src/keycode.cpp:248 +#: src/keycode.cpp +msgid "Back" +msgstr "退格" + +#: src/keycode.cpp +msgid "Capital" +msgstr "大写" + +#: src/keycode.cpp +msgid "Clear" +msgstr "Clear键" + +#: src/keycode.cpp +msgid "Comma" +msgstr "逗号" + +#: src/keycode.cpp +msgid "Control" +msgstr "Ctrl键" + +#: src/keycode.cpp +msgid "Convert" +msgstr "转换" + +#: src/keycode.cpp msgid "CrSel" msgstr "CrSel键" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Down" +msgstr "向下" + +#: src/keycode.cpp +msgid "End" +msgstr "End键" + +#: src/keycode.cpp msgid "Erase OEF" msgstr "Erase OEF键" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape键" + +#: src/keycode.cpp msgid "ExSel" msgstr "ExSel键" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Execute" +msgstr "执行" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final键" + +#: src/keycode.cpp +msgid "Help" +msgstr "帮助" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home键" + +#: src/keycode.cpp +msgid "Insert" +msgstr "插入" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja键" + +#: src/keycode.cpp +msgid "Kana" +msgstr "假名" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "Kanji键" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "左键" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "左Control键" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "左菜单" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "左Shift键" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "左窗口" + +#: src/keycode.cpp +msgid "Menu" +msgstr "菜单" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "中键" + +#: src/keycode.cpp +msgid "Minus" +msgstr "减号" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "改变模式" + +#: src/keycode.cpp +msgid "Next" +msgstr "下一个" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "无变换" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "小键盘锁" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "小键盘*" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "小键盘+" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "小键盘-" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "小键盘/" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "小键盘0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "小键盘1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "小键盘2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "小键盘3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "小键盘4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "小键盘5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "小键盘6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "小键盘7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "小键盘8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "小键盘9" + +#: src/keycode.cpp msgid "OEM Clear" msgstr "OEM Clear键" -#: src/keycode.cpp:249 +#: src/keycode.cpp msgid "PA1" msgstr "PA1键" -#: src/keycode.cpp:249 +#: src/keycode.cpp +msgid "Pause" +msgstr "暂停" + +#: src/keycode.cpp +msgid "Period" +msgstr "句号" + +#: src/keycode.cpp +msgid "Plus" +msgstr "加号" + +#: src/keycode.cpp +msgid "Print" +msgstr "打印" + +#: src/keycode.cpp +msgid "Prior" +msgstr "Prior键" + +#: src/keycode.cpp +msgid "Return" +msgstr "回车" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "右键" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "右Control键" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "右菜单" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "右Shift键" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "右窗口" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock键" + +#: src/keycode.cpp +msgid "Select" +msgstr "选择" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift键" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "睡眠" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "快照" + +#: src/keycode.cpp +msgid "Space" +msgstr "空格" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab键" + +#: src/keycode.cpp +msgid "Up" +msgstr "向上" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X键1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X键2" + +#: src/keycode.cpp msgid "Zoom" msgstr "缩放" -#: src/main.cpp:1681 -msgid "Main Menu" +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "三维云彩" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D mode" +msgstr "飞行模式" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "高级联机设置" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Anisotropic filtering" +msgstr "各向异性过滤" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "向后" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "双线性过滤" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "绑定地址" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Build inside player" +msgstr "多人游戏" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bumpmapping" +msgstr "贴图处理" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "改变键位设置" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "改变键位设置" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "创造模式" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "创造模式" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "三维云彩" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" msgstr "主菜单" -#: src/main.cpp:1719 -msgid "Player name too long." +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "命令" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "连接的玻璃" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "正在连接服务器..." + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "控制台" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "控制台" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "控制台" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Ctrl键" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "开启伤害风险" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default game" +msgstr "编辑游戏" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "新密码" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "启用粒子效果" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "连按两次“跳”切换飞行模式" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "连按两次“跳”切换飞行模式" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enable mod security" +msgstr "网上MOD库" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "开启伤害风险" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "yes" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "各向异性过滤" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fly key" +msgstr "飞行模式" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "向前" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "GUI scaling filter" +msgstr "GUI缩放因子" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Generate normalmaps" +msgstr "产生法线贴图" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "禁用MOD包" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "启用" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "游戏" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "物品栏" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "跳" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "左菜单" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "主菜单" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "主菜单" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "地图生成器" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "地图生成器" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "地图生成器" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "地图生成器" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "地图生成器" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "地图生成器" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "菜单" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "贴图处理" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Node highlighting" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "视差贴图" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion" +msgstr "视差贴图" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion Scale" +msgstr "视差贴图" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion bias" +msgstr "视差贴图" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion iterations" +msgstr "视差贴图" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion mode" +msgstr "视差贴图" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion strength" +msgstr "视差贴图" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Player name" msgstr "玩家的名字太长了" -#: src/main.cpp:1757 -msgid "Connection error (timed out?)" -msgstr "连接出错(超时?)" +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" -#: src/main.cpp:1919 -msgid "No world selected and no address provided. Nothing to do." -msgstr "没有选择世界或提供地址。未执行操作。" +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" -#: src/main.cpp:1926 -msgid "Provided world path doesn't exist: " -msgstr "提供世界地址不存在" +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" -#: src/main.cpp:1935 -msgid "Could not find or load game \"" -msgstr "无法找到或载入游戏模式" +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" -#: src/main.cpp:1953 -msgid "Invalid gamespec." -msgstr "非法游戏模式规格。" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "载入中..." -#~ msgid "Left click: Move all items, Right click: Move single item" -#~ msgstr "左键:移动所有物品,右键:移动单个物品" +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" -#~ msgid "is required by:" -#~ msgstr "被需要:" +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" -#~ msgid "Configuration saved. " -#~ msgstr "配置已保存。 " +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" -#~ msgid "Warning: Configuration not consistent. " -#~ msgstr "警告:配置不一致。 " +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" -#~ msgid "Cannot create world: Name contains invalid characters" -#~ msgstr "无法创建世界:名字包含非法字符" +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" -#~ msgid "Multiplayer" -#~ msgstr "多人游戏" +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" -#~ msgid "Advanced" -#~ msgstr "高级联机设置" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "选择范围" -#~ msgid "Show Public" -#~ msgstr "显示公共" +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" -#~ msgid "Show Favorites" -#~ msgstr "显示最爱" +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" -#~ msgid "Leave address blank to start a local server." -#~ msgstr "地址栏留空可启动本地服务器。" +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" -#~ msgid "Create world" -#~ msgstr "创造世界" +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "右菜单" -#~ msgid "Address required." -#~ msgstr "需要地址。" +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" -#~ msgid "Cannot delete world: Nothing selected" -#~ msgstr "无法删除世界:没有选择世界" +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" -#~ msgid "Files to be deleted" -#~ msgstr "将被删除的文件" +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" -#~ msgid "Cannot create world: No games found" -#~ msgstr "无法创造世界:未找到游戏模式" +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" -#~ msgid "Cannot configure world: Nothing selected" -#~ msgstr "无法配置世界:没有选择世界" +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" -#~ msgid "Failed to delete all world files" -#~ msgstr "无法删除所有该世界的文件" +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "快照" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "单人游戏" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "服务器" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "服务器端口" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "服务器端口" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "服务器" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "服务器端口" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "公共服务器列表" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "公共服务器列表" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "着色器" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "平滑光照" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "潜行" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of generated normalmaps." +msgstr "产生法线贴图" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "材质包" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "三线性过滤" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "按键" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "内部开发人员" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "音量" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Walking speed" +msgstr "摇动的叶子" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving Nodes" +msgstr "摇动的叶子" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "摇动的叶子" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving plants" +msgstr "摇动的植物" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water" +msgstr "摇动的水" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water height" +msgstr "摇动的水" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water length" +msgstr "摇动的水" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water speed" +msgstr "摇动的水" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "Restart minetest for driver change to take effect" +#~ msgstr "重启minetest让驱动变化生效" + +#~ msgid "Game Name" +#~ msgstr "游戏名" + +#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" +#~ msgstr "游戏管理: 无法复制MOD“$1”到游戏“$2”" + +#~ msgid "GAMES" +#~ msgstr "游戏" + +#~ msgid "Mods:" +#~ msgstr "MODS:" + +#~ msgid "new game" +#~ msgstr "新建游戏" + +#~ msgid "EDIT GAME" +#~ msgstr "编辑游戏" + +#~ msgid "Remove selected mod" +#~ msgstr "删除选中MOD" + +#~ msgid "<<-- Add mod" +#~ msgstr "<<-- 添加MOD" + +#~ msgid "CLIENT" +#~ msgstr "客户端" + +#~ msgid "Favorites:" +#~ msgstr "最爱的服务器:" + +#~ msgid "START SERVER" +#~ msgstr "启动服务器" + +#~ msgid "Name" +#~ msgstr "名字" + +#~ msgid "Password" +#~ msgstr "密码" + +#~ msgid "SETTINGS" +#~ msgstr "设置" + +#~ msgid "Preload item visuals" +#~ msgstr "预先加载物品图像" + +#~ msgid "Finite Liquid" +#~ msgstr "液体有限延伸" + +#~ msgid "SINGLE PLAYER" +#~ msgstr "单人游戏" + +#~ msgid "TEXTURE PACKS" +#~ msgstr "材质包" + +#~ msgid "MODS" +#~ msgstr "MODS" + +#~ msgid "Add mod:" +#~ msgstr "添加MOD:" + +#~ msgid "Local install" +#~ msgstr "本地安装" + +#~ msgid "" +#~ "Warning: Some mods are not configured yet.\n" +#~ "They will be enabled by default when you save the configuration. " +#~ msgstr "" +#~ "警告:一些MOD仍未设定。\n" +#~ "它们会在你保存配置的时候自动启用。 " + +#~ msgid "" +#~ "Warning: Some configured mods are missing.\n" +#~ "Their setting will be removed when you save the configuration. " +#~ msgstr "" +#~ "警告:缺少一些设定了的MOD。\n" +#~ "它们的设置会在你保存配置的时候被移除。 " #~ msgid "" #~ "Default Controls:\n" @@ -1068,146 +3638,94 @@ msgstr "非法游戏模式规格。" #~ "ESC:菜单\n" #~ "T:聊天\n" -#~ msgid "" -#~ "Warning: Some configured mods are missing.\n" -#~ "Their setting will be removed when you save the configuration. " -#~ msgstr "" -#~ "警告:缺少一些设定了的MOD。\n" -#~ "它们的设置会在你保存配置的时候被移除。 " +#~ msgid "Failed to delete all world files" +#~ msgstr "无法删除所有该世界的文件" -#~ msgid "" -#~ "Warning: Some mods are not configured yet.\n" -#~ "They will be enabled by default when you save the configuration. " -#~ msgstr "" -#~ "警告:一些MOD仍未设定。\n" -#~ "它们会在你保存配置的时候自动启用。 " +#~ msgid "Cannot configure world: Nothing selected" +#~ msgstr "无法配置世界:没有选择世界" -#~ msgid "" -#~ "Default Controls:\n" -#~ "- WASD: move\n" -#~ "- Space: jump/climb\n" -#~ "- Shift: sneak/go down\n" -#~ "- Q: drop item\n" -#~ "- I: inventory\n" -#~ "- Mouse: turn/look\n" -#~ "- Mouse left: dig/punch\n" -#~ "- Mouse right: place/use\n" -#~ "- Mouse wheel: select item\n" -#~ "- T: chat\n" -#~ msgstr "" -#~ "默认控制:\n" -#~ "W/A/S/D: 移动\n" -#~ "空格: 跳/爬\n" -#~ "Shift: 潜行/向下\n" -#~ "Q: 丢物品\n" -#~ "I: 物品栏\n" -#~ "鼠标:转身/环顾\n" -#~ "鼠标左键: 挖\n" -#~ "鼠标右键: 放/使用\n" -#~ "鼠标滚轮: 选择物品\n" -#~ "T: 聊天\n" +#~ msgid "Cannot create world: No games found" +#~ msgstr "无法创造世界:未找到游戏模式" -#~ msgid "Exit to OS" -#~ msgstr "退出至操作系统" +#~ msgid "Files to be deleted" +#~ msgstr "将被删除的文件" -#~ msgid "Exit to Menu" -#~ msgstr "退出至菜单" +#~ msgid "Cannot delete world: Nothing selected" +#~ msgstr "无法删除世界:没有选择世界" -#~ msgid "Sound Volume" -#~ msgstr "音量" +#~ msgid "Address required." +#~ msgstr "需要地址。" -#~ msgid "Change Password" -#~ msgstr "更改密码" +#~ msgid "Create world" +#~ msgstr "创造世界" -#~ msgid "Continue" -#~ msgstr "继续" +#~ msgid "Leave address blank to start a local server." +#~ msgstr "地址栏留空可启动本地服务器。" -#~ msgid "You died." -#~ msgstr "你死了。" +#~ msgid "Show Favorites" +#~ msgstr "显示最爱" -#~ msgid "Shutting down stuff..." -#~ msgstr "关闭中......" +#~ msgid "Show Public" +#~ msgstr "显示公共" -#~ msgid "Connecting to server..." -#~ msgstr "正在连接服务器..." +#~ msgid "Cannot create world: Name contains invalid characters" +#~ msgstr "无法创建世界:名字包含非法字符" -#~ msgid "Resolving address..." -#~ msgstr "正在解析地址..." +#~ msgid "Warning: Configuration not consistent. " +#~ msgstr "警告:配置不一致。 " -#~ msgid "Creating client..." -#~ msgstr "正在建立客户端..." +#~ msgid "Configuration saved. " +#~ msgstr "配置已保存。 " -#~ msgid "Creating server...." -#~ msgstr "正在建立服务器...." +#~ msgid "is required by:" +#~ msgstr "被需要:" -#~ msgid "Loading..." -#~ msgstr "载入中..." +#~ msgid "Left click: Move all items, Right click: Move single item" +#~ msgstr "左键:移动所有物品,右键:移动单个物品" -#~ msgid "Local install" -#~ msgstr "本地安装" +#~ msgid " MB/s" +#~ msgstr "兆字节/秒" -#~ msgid "Add mod:" -#~ msgstr "添加MOD:" +#~ msgid " KB/s" +#~ msgstr "千字节/秒" -#~ msgid "MODS" -#~ msgstr "MODS" +#, fuzzy +#~ msgid "Downloading" +#~ msgstr "下载中" -#~ msgid "TEXTURE PACKS" -#~ msgstr "材质包" +#~ msgid "Touchthreshold (px)" +#~ msgstr "触控阈值(像素)" -#~ msgid "SINGLE PLAYER" -#~ msgstr "单人游戏" +#~ msgid "Touch free target" +#~ msgstr "自由触摸目标" -#~ msgid "Finite Liquid" -#~ msgstr "液体有限延伸" +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "启用着色器需要使用OpenGL驱动。" -#~ msgid "Preload item visuals" -#~ msgstr "预先加载物品图像" +#, fuzzy +#~ msgid "Simple Leaves" +#~ msgstr "摇动的叶子" -#~ msgid "SETTINGS" -#~ msgstr "设置" +#~ msgid "Scaling factor applied to menu elements: " +#~ msgstr "菜单元素应用缩放因子" -#~ msgid "Password" -#~ msgstr "密码" +#, fuzzy +#~ msgid "Reset singleplayer world" +#~ msgstr "重置单人游戏" -#~ msgid "Name" -#~ msgstr "名字" +#~ msgid "Opaque Water" +#~ msgstr "不透明的水" -#~ msgid "START SERVER" -#~ msgstr "启动服务器" +#, fuzzy +#~ msgid "Opaque Leaves" +#~ msgstr "不透明的水" -#~ msgid "Favorites:" -#~ msgstr "最爱的服务器:" +#~ msgid "No!!!" +#~ msgstr "不!!!" -#~ msgid "CLIENT" -#~ msgstr "客户端" +#, fuzzy +#~ msgid "Fancy Leaves" +#~ msgstr "花式树" -#~ msgid "<<-- Add mod" -#~ msgstr "<<-- 添加MOD" - -#~ msgid "Remove selected mod" -#~ msgstr "删除选中MOD" - -#~ msgid "EDIT GAME" -#~ msgstr "编辑游戏" - -#~ msgid "new game" -#~ msgstr "新建游戏" - -#~ msgid "edit game" -#~ msgstr "编辑游戏" - -#~ msgid "Mods:" -#~ msgstr "MODS:" - -#~ msgid "Games" -#~ msgstr "游戏" - -#~ msgid "GAMES" -#~ msgstr "游戏" - -#~ msgid "Gamemgr: Unable to copy mod \"$1\" to game \"$2\"" -#~ msgstr "游戏管理: 无法复制MOD“$1”到游戏“$2”" - -#~ msgid "Game Name" -#~ msgstr "游戏名" +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr "你确定要重置您的单人世界吗?" diff --git a/po/zh_TW/minetest.po b/po/zh_TW/minetest.po new file mode 100644 index 00000000..9503dc65 --- /dev/null +++ b/po/zh_TW/minetest.po @@ -0,0 +1,3578 @@ +# Chinese translations for minetest package. +# Copyright (C) 2015 THE minetest'S COPYRIGHT HOLDER +# This file is distributed under the same license as the minetest package. +# Automatically generated, 2015. +# +msgid "" +msgstr "" +"Project-Id-Version: minetest\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-24 20:28+0200\n" +"PO-Revision-Date: 2015-09-17 12:48+0200\n" +"Last-Translator: Jeff Huang \n" +"Language-Team: Chinese (Taiwan) \n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 2.4-dev\n" + +#: builtin/fstk/ui.lua +msgid "An error occured in a Lua script, such as a mod:" +msgstr "在 Lua 指令稿中發生錯誤,像是 mod:" + +#: builtin/fstk/ui.lua +msgid "An error occured:" +msgstr "發生錯誤:" + +#: builtin/fstk/ui.lua +msgid "Main menu" +msgstr "主選單" + +#: builtin/fstk/ui.lua builtin/mainmenu/store.lua +msgid "Ok" +msgstr "確定" + +#: builtin/fstk/ui.lua +msgid "Reconnect" +msgstr "重新連線" + +#: builtin/fstk/ui.lua +msgid "The server has requested a reconnect:" +msgstr "伺服器已要求重新連線:" + +#: builtin/mainmenu/common.lua src/game.cpp +msgid "Loading..." +msgstr "正在載入..." + +#: builtin/mainmenu/common.lua +#, fuzzy +msgid "Protocol version mismatch. " +msgstr "協定版本不符合,伺服器 " + +#: builtin/mainmenu/common.lua +msgid "Server enforces protocol version $1. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Server supports protocol versions between $1 and $2. " +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "Try reenabling public serverlist and check your internet connection." +msgstr "嘗試重新啟用公共伺服器清單並檢查您的網際網路連線。" + +#: builtin/mainmenu/common.lua +msgid "We only support protocol version $1." +msgstr "" + +#: builtin/mainmenu/common.lua +msgid "We support protocol versions between version $1 and $2." +msgstr "" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/dlg_create_world.lua +#: builtin/mainmenu/dlg_rename_modpack.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Cancel" +msgstr "取消" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_mods.lua +msgid "Depends:" +msgstr "依賴:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Disable MP" +msgstr "停用 MP" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable MP" +msgstr "啟用 MP" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Enable all" +msgstr "啟用全部" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "" +"Failed to enable mod \"$1\" as it contains disallowed characters. Only " +"chararacters [a-z0-9_] are allowed." +msgstr "" +"啟用 mod 「$1」 失敗,因為其包含了不合法的字元。只有 字元 [a-z0-9_] 才是可用" +"的。" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide Game" +msgstr "隱藏遊戲" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Hide mp content" +msgstr "隱藏 mp 內容" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "Mod:" +msgstr "Mod:" + +#: builtin/mainmenu/dlg_config_world.lua builtin/mainmenu/tab_settings.lua +#: src/guiKeyChangeMenu.cpp +msgid "Save" +msgstr "儲存" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "World:" +msgstr "世界:" + +#: builtin/mainmenu/dlg_config_world.lua +msgid "enabled" +msgstr "已啟用" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "A world named \"$1\" already exists" +msgstr "名為「$1」的世界已存在" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Create" +msgstr "建立" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download a subgame, such as minetest_game, from minetest.net" +msgstr "從 minetest.net 下載一個子遊戲,像是 minetest_game" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Download one from minetest.net" +msgstr "從 minetest.net 下載一個" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Game" +msgstr "遊戲" + +#: builtin/mainmenu/dlg_create_world.lua src/settings_translation_file.cpp +msgid "Mapgen" +msgstr "地圖產生器" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "No worldname given or no game selected" +msgstr "未給予世界遊戲或是未選取遊戲" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Seed" +msgstr "種子" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "Warning: The minimal development test is meant for developers." +msgstr "警告:最小化的開發測試僅供開發者使用。" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "World name" +msgstr "世界遊戲" + +#: builtin/mainmenu/dlg_create_world.lua +msgid "You have no subgames installed." +msgstr "您沒有安裝子遊戲。" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Are you sure you want to delete \"$1\"?" +msgstr "您確定您要刪除「$1」嗎?" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Modmgr: failed to delete \"$1\"" +msgstr "Mod 管理員:刪除「$1」失敗" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "Modmgr: invalid modpath \"$1\"" +msgstr "Mod 管理員:無效的 mod 路徑「$1」" + +#: builtin/mainmenu/dlg_delete_mod.lua +msgid "No of course not!" +msgstr "不,絕對不是!" + +#: builtin/mainmenu/dlg_delete_mod.lua builtin/mainmenu/dlg_delete_world.lua +msgid "Yes" +msgstr "是" + +#: builtin/mainmenu/dlg_delete_world.lua +msgid "Delete World \"$1\"?" +msgstr "刪除世界「$1」?" + +#: builtin/mainmenu/dlg_delete_world.lua +msgid "No" +msgstr "否" + +#: builtin/mainmenu/dlg_rename_modpack.lua src/keycode.cpp +msgid "Accept" +msgstr "接受" + +#: builtin/mainmenu/dlg_rename_modpack.lua +msgid "Rename Modpack:" +msgstr "重新命名 Mod 包:" + +#: builtin/mainmenu/modmgr.lua +msgid "" +"\n" +"Install Mod: unsupported filetype \"$1\" or broken archive" +msgstr "" +"\n" +"安裝 Mod:不支援的檔案類型「$1」或是損毀的壓縮檔" + +#: builtin/mainmenu/modmgr.lua +msgid "Failed to install $1 to $2" +msgstr "安裝 $1 到 $2 失敗" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: file: \"$1\"" +msgstr "安裝 Mod:檔案「$1」" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find real modname for: $1" +msgstr "安裝 Mod:找不到 $1 的真實 mod 名稱" + +#: builtin/mainmenu/modmgr.lua +msgid "Install Mod: unable to find suitable foldername for modpack $1" +msgstr "安裝 Mod:找不到 mod 包 $1 適合的資料夾名稱" + +#: builtin/mainmenu/store.lua +msgid "Close store" +msgstr "關閉商店" + +#: builtin/mainmenu/store.lua +msgid "Downloading $1, please wait..." +msgstr "正在下載 $1,請稍候..." + +#: builtin/mainmenu/store.lua +msgid "Install" +msgstr "安裝" + +#: builtin/mainmenu/store.lua +msgid "Page $1 of $2" +msgstr "$2 的第 $1 頁" + +#: builtin/mainmenu/store.lua +msgid "Rating" +msgstr "評分" + +#: builtin/mainmenu/store.lua +msgid "Search" +msgstr "搜尋" + +#: builtin/mainmenu/store.lua +msgid "Shortname:" +msgstr "短名稱:" + +#: builtin/mainmenu/store.lua +msgid "Successfully installed:" +msgstr "已成功安裝:" + +#: builtin/mainmenu/store.lua +msgid "Unsorted" +msgstr "未分類" + +#: builtin/mainmenu/store.lua +msgid "re-Install" +msgstr "重新安裝" + +#: builtin/mainmenu/tab_credits.lua +msgid "Active Contributors" +msgstr "活躍的貢獻者" + +#: builtin/mainmenu/tab_credits.lua +msgid "Core Developers" +msgstr "核心開發者" + +#: builtin/mainmenu/tab_credits.lua +msgid "Credits" +msgstr "感謝" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Contributors" +msgstr "先前的貢獻者" + +#: builtin/mainmenu/tab_credits.lua +msgid "Previous Core Developers" +msgstr "先前的核心開發者" + +#: builtin/mainmenu/tab_mods.lua +msgid "Installed Mods:" +msgstr "已安裝的 Mod:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Mod information:" +msgstr "Mod 資訊:" + +#: builtin/mainmenu/tab_mods.lua builtin/mainmenu/tab_settings.lua +msgid "Mods" +msgstr "Mods" + +#: builtin/mainmenu/tab_mods.lua +msgid "No mod description available" +msgstr "找不到 mod 描述" + +#: builtin/mainmenu/tab_mods.lua +msgid "Rename" +msgstr "重新命名" + +#: builtin/mainmenu/tab_mods.lua +msgid "Select Mod File:" +msgstr "選取 Mod 檔案:" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected mod" +msgstr "解除安裝已選取的 mod" + +#: builtin/mainmenu/tab_mods.lua +msgid "Uninstall selected modpack" +msgstr "解除安裝已選取的 mod 包" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Address / Port :" +msgstr "地址/埠:" + +#: builtin/mainmenu/tab_multiplayer.lua src/settings_translation_file.cpp +msgid "Client" +msgstr "客戶端" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Connect" +msgstr "連線" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Creative mode" +msgstr "創造模式" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Damage enabled" +msgstr "已啟用傷害" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_server.lua +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Delete" +msgstr "刪除" + +#: builtin/mainmenu/tab_multiplayer.lua +msgid "Name / Password :" +msgstr "名稱/密碼:" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "Public Serverlist" +msgstr "公共伺服器清單" + +#: builtin/mainmenu/tab_multiplayer.lua builtin/mainmenu/tab_simple_main.lua +msgid "PvP enabled" +msgstr "已啟用 PvP" + +#: builtin/mainmenu/tab_server.lua +msgid "Bind Address" +msgstr "綁定地址" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Configure" +msgstr "設定" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Creative Mode" +msgstr "創造模式" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Enable Damage" +msgstr "啟用傷害" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_simple_main.lua +msgid "Name/Password" +msgstr "名稱/密碼" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "New" +msgstr "新" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "No world created or selected!" +msgstr "未有已建立或已選取的世界!" + +#: builtin/mainmenu/tab_server.lua +msgid "Port" +msgstr "埠" + +#: builtin/mainmenu/tab_server.lua +msgid "Public" +msgstr "公共" + +#: builtin/mainmenu/tab_server.lua builtin/mainmenu/tab_singleplayer.lua +msgid "Select World:" +msgstr "選取世界:" + +#: builtin/mainmenu/tab_server.lua +msgid "Server" +msgstr "伺服器" + +#: builtin/mainmenu/tab_server.lua +msgid "Server Port" +msgstr "伺服器埠" + +#: builtin/mainmenu/tab_server.lua +msgid "Start Game" +msgstr "開始遊戲" + +#: builtin/mainmenu/tab_settings.lua +msgid "\"" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "(No description of setting given)" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Browse" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Change keys" +msgstr "變更按鍵" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Disabled" +msgstr "停用 MP" + +#: builtin/mainmenu/tab_settings.lua +msgid "Edit" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Enabled" +msgstr "已啟用" + +#: builtin/mainmenu/tab_settings.lua +msgid "" +"Format: , , (, , ), , " +", " +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Games" +msgstr "遊戲" + +#: builtin/mainmenu/tab_settings.lua +msgid "Optionally the lacunarity can be appended with a leading comma." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a comma seperated list of flags." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid integer." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Please enter a valid number." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Possible values are: " +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "Restore Default" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +#, fuzzy +msgid "Select path" +msgstr "選擇" + +#: builtin/mainmenu/tab_settings.lua +msgid "Settings" +msgstr "設定" + +#: builtin/mainmenu/tab_settings.lua +msgid "Show technical names" +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be greater than $1." +msgstr "" + +#: builtin/mainmenu/tab_settings.lua +msgid "The value must be lower than $1." +msgstr "" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Config mods" +msgstr "設定 mod" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Main" +msgstr "主要" + +#: builtin/mainmenu/tab_simple_main.lua +msgid "Start Singleplayer" +msgstr "開始單人遊戲" + +#: builtin/mainmenu/tab_singleplayer.lua src/keycode.cpp +msgid "Play" +msgstr "玩" + +#: builtin/mainmenu/tab_singleplayer.lua +msgid "Singleplayer" +msgstr "單人遊戲" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "No information available" +msgstr "不提供資訊" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "None" +msgstr "無" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Select texture pack:" +msgstr "選取材質包:" + +#: builtin/mainmenu/tab_texturepacks.lua +msgid "Texturepacks" +msgstr "材質包" + +#: src/client.cpp +msgid "Connection timed out." +msgstr "連線逾時。" + +#: src/client.cpp +msgid "Done!" +msgstr "完成!" + +#: src/client.cpp +msgid "Initializing nodes" +msgstr "正在初始化節點" + +#: src/client.cpp +msgid "Initializing nodes..." +msgstr "正在初始化節點..." + +#: src/client.cpp +msgid "Item textures..." +msgstr "物品材質..." + +#: src/client.cpp +msgid "Loading textures..." +msgstr "正在載入材質..." + +#: src/client.cpp +msgid "Rebuilding shaders..." +msgstr "正在重新構建著色器..." + +#: src/client/clientlauncher.cpp +msgid "Connection error (timed out?)" +msgstr "連線錯誤(逾時?)" + +#: src/client/clientlauncher.cpp +msgid "Could not find or load game \"" +msgstr "找不到或無法載入遊戲 \"" + +#: src/client/clientlauncher.cpp +msgid "Invalid gamespec." +msgstr "無效的遊戲規格。" + +#: src/client/clientlauncher.cpp +msgid "Main Menu" +msgstr "主選單" + +#: src/client/clientlauncher.cpp +msgid "No world selected and no address provided. Nothing to do." +msgstr "未有已被選取的世界,且未提供地址。無事可做。" + +#: src/client/clientlauncher.cpp +msgid "Player name too long." +msgstr "玩家名稱太長。" + +#: src/client/clientlauncher.cpp +msgid "Provided world path doesn't exist: " +msgstr "提供的世界路徑不存在: " + +#: src/fontengine.cpp +msgid "needs_fallback_font" +msgstr "needs_fallback_font" + +#: src/game.cpp +msgid "" +"\n" +"Check debug.txt for details." +msgstr "" +"\n" +"檢視 debug.txt 以取得更多資訊。" + +#: src/game.cpp +msgid "Change Keys" +msgstr "變更按鍵" + +#: src/game.cpp +msgid "Change Password" +msgstr "變更密碼" + +#: src/game.cpp +msgid "Connecting to server..." +msgstr "正在連線至伺服器..." + +#: src/game.cpp +msgid "Continue" +msgstr "繼續" + +#: src/game.cpp +msgid "Creating client..." +msgstr "正在建立客戶端..." + +#: src/game.cpp +msgid "Creating server..." +msgstr "正在建立伺服器..." + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"- WASD: move\n" +"- Space: jump/climb\n" +"- Shift: sneak/go down\n" +"- Q: drop item\n" +"- I: inventory\n" +"- Mouse: turn/look\n" +"- Mouse left: dig/punch\n" +"- Mouse right: place/use\n" +"- Mouse wheel: select item\n" +"- T: chat\n" +msgstr "" +"預設控制:\n" +"- WASD:移動\n" +"- Space:跳躍/攀爬\n" +"- Shift:潛行/往下\n" +"- Q:丟棄物品\n" +"- I:物品欄\n" +"- 滑鼠:旋轉/觀看\n" +"- 滑鼠左鍵:挖/推擠\n" +"- 滑鼠右鍵:放置/使用\n" +"- 滑鼠滾輪:選取物品\n" +"- T:聊天\n" + +#: src/game.cpp +msgid "" +"Default Controls:\n" +"No menu visible:\n" +"- single tap: button activate\n" +"- double tap: place/use\n" +"- slide finger: look around\n" +"Menu/Inventory visible:\n" +"- double tap (outside):\n" +" -->close\n" +"- touch stack, touch slot:\n" +" --> move stack\n" +"- touch&drag, tap 2nd finger\n" +" --> place single item to slot\n" +msgstr "" +"預設控制:\n" +"無可見選單:\n" +"- 輕擊一次:啟動按鈕\n" +"- 輕擊兩次:放置/使用\n" +"- 滑動手指:轉動視角\n" +"檢視選單/物品欄:\n" +"- 輕擊兩次(外面):\n" +" -->關閉\n" +"- 碰觸堆疊,碰觸槽:\n" +" --> 移動堆疊\n" +"- 碰觸並拖曳,以第二隻手指輕擊\n" +" --> 放置單一物品到槽中\n" + +#: src/game.cpp +msgid "Exit to Menu" +msgstr "離開到選單" + +#: src/game.cpp +msgid "Exit to OS" +msgstr "離開到作業系統" + +#: src/game.cpp +msgid "Item definitions..." +msgstr "物品定義..." + +#: src/game.cpp +msgid "KiB/s" +msgstr "KiB/s" + +#: src/game.cpp +msgid "Media..." +msgstr "媒體..." + +#: src/game.cpp +msgid "MiB/s" +msgstr "MiB/s" + +#: src/game.cpp +msgid "Node definitions..." +msgstr "節點定義..." + +#: src/game.cpp src/guiFormSpecMenu.cpp +msgid "Proceed" +msgstr "開始" + +#: src/game.cpp +msgid "Resolving address..." +msgstr "正在解析地址……" + +#: src/game.cpp +msgid "Respawn" +msgstr "重生" + +#: src/game.cpp +msgid "Shutting down..." +msgstr "關閉..." + +#: src/game.cpp +msgid "Sound Volume" +msgstr "音量" + +#: src/game.cpp +msgid "You died." +msgstr "您已經死亡。" + +#: src/guiFormSpecMenu.cpp +msgid "Enter " +msgstr "輸入 " + +#: src/guiFormSpecMenu.cpp +msgid "ok" +msgstr "確定" + +#: src/guiKeyChangeMenu.cpp +msgid "\"Use\" = climb down" +msgstr "「使用」=向下攀爬" + +#: src/guiKeyChangeMenu.cpp +msgid "Backward" +msgstr "後退" + +#: src/guiKeyChangeMenu.cpp +msgid "Chat" +msgstr "聊天" + +#: src/guiKeyChangeMenu.cpp +msgid "Command" +msgstr "指令" + +#: src/guiKeyChangeMenu.cpp +msgid "Console" +msgstr "終端機" + +#: src/guiKeyChangeMenu.cpp +msgid "Double tap \"jump\" to toggle fly" +msgstr "輕擊兩次「跳躍」以切換成飛行" + +#: src/guiKeyChangeMenu.cpp +msgid "Drop" +msgstr "丟棄" + +#: src/guiKeyChangeMenu.cpp +msgid "Forward" +msgstr "前進" + +#: src/guiKeyChangeMenu.cpp +msgid "Inventory" +msgstr "物品欄" + +#: src/guiKeyChangeMenu.cpp +msgid "Jump" +msgstr "跳躍" + +#: src/guiKeyChangeMenu.cpp +msgid "Key already in use" +msgstr "此按鍵已被使用" + +#: src/guiKeyChangeMenu.cpp +msgid "Keybindings. (If this menu screws up, remove stuff from minetest.conf)" +msgstr "按鍵綁定。(若此選單鎖住了,從 minetest.conf 移除相關參數)" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Left" +msgstr "左" + +#: src/guiKeyChangeMenu.cpp src/settings_translation_file.cpp +msgid "Print stacks" +msgstr "印出堆疊" + +#: src/guiKeyChangeMenu.cpp +msgid "Range select" +msgstr "選擇範圍" + +#: src/guiKeyChangeMenu.cpp src/keycode.cpp +msgid "Right" +msgstr "右" + +#: src/guiKeyChangeMenu.cpp +msgid "Sneak" +msgstr "潛行" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle Cinematic" +msgstr "切換過場動畫" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fast" +msgstr "切換快速" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle fly" +msgstr "切換飛行" + +#: src/guiKeyChangeMenu.cpp +msgid "Toggle noclip" +msgstr "切換無省略" + +#: src/guiKeyChangeMenu.cpp +msgid "Use" +msgstr "使用" + +#: src/guiKeyChangeMenu.cpp +msgid "press key" +msgstr "按下按鍵" + +#: src/guiPasswordChange.cpp +msgid "Change" +msgstr "變更" + +#: src/guiPasswordChange.cpp +msgid "Confirm Password" +msgstr "確認密碼" + +#: src/guiPasswordChange.cpp +msgid "New Password" +msgstr "新密碼" + +#: src/guiPasswordChange.cpp +msgid "Old Password" +msgstr "舊密碼" + +#: src/guiPasswordChange.cpp +msgid "Passwords do not match!" +msgstr "密碼不符合!" + +#: src/guiVolumeChange.cpp +msgid "Exit" +msgstr "離開" + +#: src/guiVolumeChange.cpp +msgid "Sound Volume: " +msgstr "音量: " + +#: src/keycode.cpp +msgid "Apps" +msgstr "應用程式" + +#: src/keycode.cpp +msgid "Attn" +msgstr "Attn" + +#: src/keycode.cpp +msgid "Back" +msgstr "Back" + +#: src/keycode.cpp +msgid "Capital" +msgstr "大寫" + +#: src/keycode.cpp +msgid "Clear" +msgstr "清除" + +#: src/keycode.cpp +msgid "Comma" +msgstr "逗號" + +#: src/keycode.cpp +msgid "Control" +msgstr "Control" + +#: src/keycode.cpp +msgid "Convert" +msgstr "轉換" + +#: src/keycode.cpp +msgid "CrSel" +msgstr "CrSel" + +#: src/keycode.cpp +msgid "Down" +msgstr "下" + +#: src/keycode.cpp +msgid "End" +msgstr "End" + +#: src/keycode.cpp +msgid "Erase OEF" +msgstr "抹除 OEF" + +#: src/keycode.cpp +msgid "Escape" +msgstr "Escape" + +#: src/keycode.cpp +msgid "ExSel" +msgstr "ExSel" + +#: src/keycode.cpp +msgid "Execute" +msgstr "執行" + +#: src/keycode.cpp +msgid "Final" +msgstr "Final" + +#: src/keycode.cpp +msgid "Help" +msgstr "說明" + +#: src/keycode.cpp +msgid "Home" +msgstr "Home" + +#: src/keycode.cpp +msgid "Insert" +msgstr "插入" + +#: src/keycode.cpp +msgid "Junja" +msgstr "Junja" + +#: src/keycode.cpp +msgid "Kana" +msgstr "假名" + +#: src/keycode.cpp +msgid "Kanji" +msgstr "日文漢字" + +#: src/keycode.cpp +msgid "Left Button" +msgstr "左鍵" + +#: src/keycode.cpp +msgid "Left Control" +msgstr "左邊 Control" + +#: src/keycode.cpp +msgid "Left Menu" +msgstr "左邊選單鍵" + +#: src/keycode.cpp +msgid "Left Shift" +msgstr "左邊 Shift" + +#: src/keycode.cpp +msgid "Left Windows" +msgstr "左方視窗" + +#: src/keycode.cpp +msgid "Menu" +msgstr "選單" + +#: src/keycode.cpp +msgid "Middle Button" +msgstr "中鍵" + +#: src/keycode.cpp +msgid "Minus" +msgstr "減號" + +#: src/keycode.cpp +msgid "Mode Change" +msgstr "模式變更" + +#: src/keycode.cpp +msgid "Next" +msgstr "下一個" + +#: src/keycode.cpp +msgid "Nonconvert" +msgstr "不轉換" + +#: src/keycode.cpp +msgid "Num Lock" +msgstr "Num Lock" + +#: src/keycode.cpp +msgid "Numpad *" +msgstr "數字鍵 *" + +#: src/keycode.cpp +msgid "Numpad +" +msgstr "數字鍵 +" + +#: src/keycode.cpp +msgid "Numpad -" +msgstr "數字鍵 -" + +#: src/keycode.cpp +msgid "Numpad /" +msgstr "數字鍵 /" + +#: src/keycode.cpp +msgid "Numpad 0" +msgstr "數字鍵 0" + +#: src/keycode.cpp +msgid "Numpad 1" +msgstr "數字鍵 1" + +#: src/keycode.cpp +msgid "Numpad 2" +msgstr "數字鍵 2" + +#: src/keycode.cpp +msgid "Numpad 3" +msgstr "數字鍵 3" + +#: src/keycode.cpp +msgid "Numpad 4" +msgstr "數字鍵 4" + +#: src/keycode.cpp +msgid "Numpad 5" +msgstr "數字鍵 5" + +#: src/keycode.cpp +msgid "Numpad 6" +msgstr "數字鍵 6" + +#: src/keycode.cpp +msgid "Numpad 7" +msgstr "數字鍵 7" + +#: src/keycode.cpp +msgid "Numpad 8" +msgstr "數字鍵 8" + +#: src/keycode.cpp +msgid "Numpad 9" +msgstr "數字鍵 9" + +#: src/keycode.cpp +msgid "OEM Clear" +msgstr "OEM 清除" + +#: src/keycode.cpp +msgid "PA1" +msgstr "PA1" + +#: src/keycode.cpp +msgid "Pause" +msgstr "暫停" + +#: src/keycode.cpp +msgid "Period" +msgstr "句號" + +#: src/keycode.cpp +msgid "Plus" +msgstr "加號" + +#: src/keycode.cpp +msgid "Print" +msgstr "列印" + +#: src/keycode.cpp +msgid "Prior" +msgstr "上一個" + +#: src/keycode.cpp +msgid "Return" +msgstr "Return" + +#: src/keycode.cpp +msgid "Right Button" +msgstr "右鍵" + +#: src/keycode.cpp +msgid "Right Control" +msgstr "右邊 Control" + +#: src/keycode.cpp +msgid "Right Menu" +msgstr "右邊選單鍵" + +#: src/keycode.cpp +msgid "Right Shift" +msgstr "右邊 Shift" + +#: src/keycode.cpp +msgid "Right Windows" +msgstr "右方視窗" + +#: src/keycode.cpp +msgid "Scroll Lock" +msgstr "Scroll Lock" + +#: src/keycode.cpp +msgid "Select" +msgstr "選擇" + +#: src/keycode.cpp +msgid "Shift" +msgstr "Shift" + +#: src/keycode.cpp +msgid "Sleep" +msgstr "睡眠" + +#: src/keycode.cpp +msgid "Snapshot" +msgstr "螢幕截圖" + +#: src/keycode.cpp +msgid "Space" +msgstr "Space" + +#: src/keycode.cpp +msgid "Tab" +msgstr "Tab" + +#: src/keycode.cpp +msgid "Up" +msgstr "上" + +#: src/keycode.cpp +msgid "X Button 1" +msgstr "X 按鈕 1" + +#: src/keycode.cpp +msgid "X Button 2" +msgstr "X 按鈕 2" + +#: src/keycode.cpp +msgid "Zoom" +msgstr "縮放" + +#: src/settings_translation_file.cpp +msgid "" +"0 = parallax occlusion with slope information (faster).\n" +"1 = relief mapping (slower, more accurate)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "3D clouds" +msgstr "3D 雲朵" + +#: src/settings_translation_file.cpp +msgid "3D mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"3D support.\n" +"Currently supported:\n" +"- none: no 3d output.\n" +"- anaglyph: cyan/magenta color 3d.\n" +"- interlaced: odd/even line based polarisation screen support.\n" +"- topbottom: split screen top/bottom.\n" +"- sidebyside: split screen side by side." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"A chosen map seed for a new map, leave empty for random.\n" +"Will be overridden when creating a new world in the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server crashes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "A message to be displayed to all clients when the server shuts down." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Absolute limit of emerge queues" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Acceleration in air" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active block range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Active object send range" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Address to connect to.\n" +"Leave this blank to start a local server.\n" +"Note that the address field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k " +"screens." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Adjust the gamma encoding for the light tables. Lower numbers are brighter.\n" +"This setting is for the client only and is ignored by the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Advanced" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Always fly and fast" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ambient occlusion gamma" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Anisotropic filtering" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Announce server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Announce to this serverlist.\n" +"If you want to announce your ipv6 address, use serverlist_url = v6.servers." +"minetest.net." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ask to reconnect after crash" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Automaticaly report to the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Backward key" +msgstr "後退" + +#: src/settings_translation_file.cpp +msgid "Basic" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bilinear filtering" +msgstr "雙線性過濾器" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Bind address" +msgstr "綁定地址" + +#: src/settings_translation_file.cpp +msgid "Bits per pixel (aka color depth) in fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Build inside player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Bumpmapping" +msgstr "映射貼圖" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera smoothing in cinematic mode" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Camera update toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat key" +msgstr "變更按鍵" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Chat toggle key" +msgstr "變更按鍵" + +#: src/settings_translation_file.cpp +msgid "Chunk size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode" +msgstr "創造模式" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Cinematic mode key" +msgstr "創造模式" + +#: src/settings_translation_file.cpp +msgid "Clean transparent textures" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Client and Server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Climbing speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Cloud radius" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds" +msgstr "3D 雲朵" + +#: src/settings_translation_file.cpp +msgid "Clouds are a client side effect." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Clouds in menu" +msgstr "主選單" + +#: src/settings_translation_file.cpp +msgid "Colored fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Comma-separated list of trusted mods that are allowed to access insecure\n" +"functions even when mod security is on (via request_insecure_environment())." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Command key" +msgstr "指令" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect glass" +msgstr "連貫的玻璃" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Connect to external media server" +msgstr "正在連線至伺服器..." + +#: src/settings_translation_file.cpp +msgid "Connects glass if supported by node." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console alpha" +msgstr "終端機" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console color" +msgstr "終端機" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Console key" +msgstr "終端機" + +#: src/settings_translation_file.cpp +msgid "Continuous forward" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Continuous forward movement (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Controls" +msgstr "Control" + +#: src/settings_translation_file.cpp +msgid "" +"Controls length of day/night cycle.\n" +"Examples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays " +"unchanged." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Controls size of deserts and beaches in Mapgen V6.\n" +"When snowbiomes are enabled 'mgv6_freq_desert' is ignored." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crash message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crosshair color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Crouch speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "DPI" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Damage" +msgstr "啟用傷害" + +#: src/settings_translation_file.cpp +msgid "Debug info toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Debug log level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dedicated server step" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Default game" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default game when creating a new world.\n" +"This will be overridden when creating a world from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Default password" +msgstr "舊密碼" + +#: src/settings_translation_file.cpp +msgid "Default privileges" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Default timeout for cURL, stated in milliseconds.\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Defines sampling step of texture.\n" +"A higher value results in smoother normal maps." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Defines the maximal player transfer distance in blocks (0 = unlimited)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Delay showing tooltips, stated in milliseconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Deprecated Lua API handling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Descending speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Description of server, to be displayed when players join and in the " +"serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Desynchronize block animation" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profile data. Useful for mod developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Detailed mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Disable anticheat" +msgstr "啟用粒子" + +#: src/settings_translation_file.cpp +msgid "Disallow empty passwords" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Domain name of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double tap jump for fly" +msgstr "輕擊兩次「跳躍」以切換成飛行" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Double-tapping the jump key toggles fly mode." +msgstr "輕擊兩次「跳躍」以切換成飛行" + +#: src/settings_translation_file.cpp +msgid "Drop item key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Dump the mapgen debug infos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable a bit lower water surface, so it doesn't " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable mod security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable players getting damage and dying." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable random user input (only used for testing)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enable selection highlighting for nodes (disables selectionbox)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable smooth lighting with simple ambient occlusion.\n" +"Disable for speed or for different looks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable to disallow old clients from connecting.\n" +"Older clients are compatible in the sense that they will not crash when " +"connecting\n" +"to new servers, but they may not support all new features that you are " +"expecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable usage of remote media server (if provided by server).\n" +"Remote servers offer a significantly faster way to download media (e.g. " +"textures)\n" +"when connecting to the server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enable/disable running an IPv6 server. An IPv6 server may be restricted\n" +"to IPv6 clients, depending on system configuration.\n" +"Ignored if bind_address is set." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables bumpmapping for textures. Normalmaps need to be supplied by the " +"texture pack\n" +"or need to be auto-generated.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Enables caching of facedir rotated meshes." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Enables minimap." +msgstr "啟用傷害" + +#: src/settings_translation_file.cpp +msgid "" +"Enables on the fly normalmap generation (Emboss effect).\n" +"Requires bumpmapping to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Enables parallax occlusion mapping.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Experimental option, might cause visible spaces between blocks\n" +"when set to higher number than 0." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FPS in pause menu" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "FSAA" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fall bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Fallback font" +msgstr "needs_fallback_font" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fallback font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode acceleration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast mode speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fast movement" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Fast movement (via use key).\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Field of view in degrees." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"File in client/serverlist/ that contains your favorite servers displayed in " +"the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Filtered textures can blend RGB values with fully-transparent neighbors,\n" +"which PNG optimizers usually discard, sometimes resulting in a dark or\n" +"light edge to transparent textures. Apply this filter to clean that up\n" +"at texture load time." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Filtering" +msgstr "無過濾器" + +#: src/settings_translation_file.cpp +msgid "Fixed map seed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fly key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Flying" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fog toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font shadow offset, if 0 then shadow will not be drawn." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Font size" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Forward key" +msgstr "前進" + +#: src/settings_translation_file.cpp +msgid "Freetype fonts" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are generated for clients, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far blocks are sent to clients, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"From how far clients know about objects, stated in mapblocks (16 nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Full screen BPP" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Fullscreen mode." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "GUI scaling" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "GUI scaling filter" +msgstr "圖形使用者介面縮放係數" + +#: src/settings_translation_file.cpp +msgid "GUI scaling filter txr2img" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gamma" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Generate normalmaps" +msgstr "生成一般地圖" + +#: src/settings_translation_file.cpp +msgid "" +"Global map generation attributes.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Graphics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Gravity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "HUD toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Handling for deprecated lua api calls:\n" +"- legacy: (try to) mimic old behaviour (default for release).\n" +"- log: mimic and log backtrace of deprecated call (default for debug).\n" +"- error: abort on usage of deprecated call (suggested for mod developers)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Height on which clouds are appearing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "High-precision FPU" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Homepage of server, to be displayed in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Horizontal initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How large area of blocks are subject to the active block stuff, stated in " +"mapblocks (16 nodes).\n" +"In active blocks objects are loaded and ABMs run." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How many blocks are flying in the wire simultaneously for the whole server." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "How many blocks are flying in the wire simultaneously per client." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"How much the server will wait before unloading unused mapblocks.\n" +"Higher value is smoother, but will use more RAM." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "IPv6 support." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If FPS would go higher than this, limit it by sleeping\n" +"to not waste CPU power for no benefit." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If disabled " +msgstr "停用 MP" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled together with fly mode, player is able to fly through solid " +"nodes.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "If enabled, " +msgstr "已啟用" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, actions are recorded for rollback.\n" +"This option is only read when server starts." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, disable cheat prevention in multiplayer." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, invalid world data won't cause the server to shut down.\n" +"Only enable this if you know what you are doing." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If enabled, new players cannot join with an empty password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"If enabled, you can place blocks at the position (feet + eye level) where " +"you stand.\n" +"This is helpful when working with nodeboxes in small areas." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "If this is set, players will always (re)spawn at the given position." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Ignore world errors" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "In-Game" +msgstr "遊戲" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background alpha (opaqueness, between 0 and 255)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "In-game chat console background color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of saving important changes in the world, stated in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Interval of sending time of day to clients." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Inventory key" +msgstr "物品欄" + +#: src/settings_translation_file.cpp +msgid "Invert mouse" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Invert vertical mouse movement." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Item entity TTL" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Jump key" +msgstr "跳躍" + +#: src/settings_translation_file.cpp +msgid "Jumping speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for decreasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for dropping the currently selected item.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for increasing the viewing range. Modifies the minimum viewing range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for jumping.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving fast in fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player backward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player forward.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player left.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for moving the player right.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat console.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window to type commands.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the chat window.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for opening the inventory.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for printing debug stacks. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for sneaking.\n" +"Also used for climbing down and descending in water if aux1_descends is " +"disabled.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for switching between first- and third-person camera.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for taking screenshots.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling cinematic mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling display of minimap.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling fast mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling flying.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling noclip mode.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the camrea update. Only used for development\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of debug info.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the HUD.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the chat.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the fog.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling the display of the profiler. Used for development.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Key for toggling unlimited view range.\n" +"See http://irrlicht.sourceforge.net/docu/namespaceirr." +"html#a54da2a0e231901735e3da1b0edf72eb3" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Key use for climbing/descending" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Language" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Leaves style" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Leaves style:\n" +"- Fancy: all faces visible\n" +"- Simple: only outer faces, if defined special_tiles are used\n" +"- Opaque: disable transparency" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Left key" +msgstr "左邊選單鍵" + +#: src/settings_translation_file.cpp +msgid "" +"Length of a server tick and the interval at which objects are generally " +"updated over network." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Level of logging to be written to debug.txt:\n" +"- (no logging)\n" +"- none (messages with no level)\n" +"- error\n" +"- warning\n" +"- action\n" +"- info\n" +"- verbose" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues on disk" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Limit of emerge queues to generate" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Limits number of parallel HTTP requests. Affects:\n" +"- Media fetch if server uses remote_media setting.\n" +"- Serverlist download and server announcement.\n" +"- Downloads performed by main menu (e.g. mod manager).\n" +"Only has an effect if compiled with cURL." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid fluidity smoothing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid loop max" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid queue purge time" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid sink" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update interval in seconds." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Liquid update tick" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Main menu game manager" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu mod manager" +msgstr "主選單" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Main menu script" +msgstr "主選單" + +#: src/settings_translation_file.cpp +msgid "" +"Make fog and sky colors depend on daytime (dawn/sunset) and view direction." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Makes DirectX work with LuaJIT. Disable if it causes troubles." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map directory" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V6.\n" +"When snowbiomes are enabled jungles are enabled and the jungles flag is " +"ignored.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Map generation attributes specific to Mapgen V7.\n" +"'ridges' are the rivers.\n" +"Flags that are not specified in the flag string are not modified from the " +"default.\n" +"Flags starting with " +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map generation limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Map save interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapblock unload timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome heat noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen biome humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen debug" +msgstr "地圖產生器" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen flags" +msgstr "地圖產生器" + +#: src/settings_translation_file.cpp +msgid "Mapgen heat blend noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen name" +msgstr "地圖產生器" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v5" +msgstr "地圖產生器" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 factor noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v5 height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v6" +msgstr "地圖產生器" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 apple trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 beach noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 biome noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 cave noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 desert frequency" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 humidity noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 mud noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 steepness noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v6 trees noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mapgen v7" +msgstr "地圖產生器" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave1 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 cave2 noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 filler depth noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 flags" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 height select noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mount height noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 mountain noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 ridge water noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain altitude noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain base noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mapgen v7 terrain persistation noise parameters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block generate distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max block send distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max liquids processed per step." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. clearobjects extra blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Max. packets per iteration" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum FPS when game is paused." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum forceloaded blocks" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum hotbar width" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of blocks that can be queued for loading." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be generated.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of blocks to be queued that are to be loaded from file.\n" +"Set to blank for an appropriate amount to be chosen automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of forceloaded mapblocks." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of mapblocks for client to be kept in memory.\n" +"Set to -1 for unlimited amount." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum number of packets sent per send step, if you have a slow connection\n" +"try reducing it, but don't reduce it to a number below double of targeted\n" +"client number." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of players that can connect simultaneously." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum number of statically stored objects in a block." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Maximum proportion of current window to be used for hotbar.\n" +"Useful if there's something to be displayed right or left of hotbar." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously blocks send per client" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum simultaneously bocks send total" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum time in ms a file download (e.g. a mod download) may take." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maximum users" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Maxmimum objects per block" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Menus" +msgstr "選單" + +#: src/settings_translation_file.cpp +msgid "Mesh cache" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Message of the day displayed to players connecting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimap scan height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Minimum texture size for filters" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Minimum wanted FPS.\n" +"The amount of rendered stuff is dynamically set according to this. and " +"viewing range min and max." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Mipmapping" +msgstr "映射貼圖" + +#: src/settings_translation_file.cpp +msgid "Mod profiling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore details URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore download URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Modstore mods list URL" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font path" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Monospace font size" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Mouse sensitivity multiplier." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for fall bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Multiplier for view bobbing.\n" +"For example: 0 for no view bobbing; 1.0 for normal; 2.0 for double." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of map generator to be used when creating a new world.\n" +"Creating a world in the main menu will override this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the player.\n" +"When running a server, clients connecting with this name are admins.\n" +"When starting from the main menu, this is overridden." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Name of the server, to be displayed when players join and in the serverlist." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Network" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Network port to listen (UDP).\n" +"This value will be overridden when starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New style water" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "New users need to input this password." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Noclip key" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Node highlighting" +msgstr "突顯節點" + +#: src/settings_translation_file.cpp +msgid "Noise parameters for biome API temperature, humidity and biome blend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps sampling" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Normalmaps strength" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of emerge threads" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of emerge threads to use. Make this field blank, or increase this " +"number\n" +"to use multiple threads. On multiprocessor systems, this will improve mapgen " +"speed greatly\n" +"at the cost of slightly buggy caves." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Number of extra blocks that can be loaded by /clearobjects at once.\n" +"This is a trade-off between sqlite transaction overhead and\n" +"memory consumption (4096=100MB, as a rule of thumb)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Number of parallax occlusion iterations." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall bias of parallax occlusion effect, usually scale/2." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Overall scale of parallax occlusion effect." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Parallax Occlusion" +msgstr "視差遮蔽" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion" +msgstr "視差遮蔽" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion Scale" +msgstr "視差遮蔽" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion bias" +msgstr "視差遮蔽" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion iterations" +msgstr "視差遮蔽" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion mode" +msgstr "視差遮蔽" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Parallax occlusion strength" +msgstr "視差遮蔽" + +#: src/settings_translation_file.cpp +msgid "Path to TrueTypeFont or bitmap." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to save screenshots at." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Path to texture directory. All textures are first searched from here." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Physics" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Player is able to fly without being affected by gravity.\n" +"This requires the " +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Player name" +msgstr "玩家名稱太長。" + +#: src/settings_translation_file.cpp +msgid "Player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Player versus Player" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Port to connect to (UDP).\n" +"Note that the port field in the main menu overrides this setting." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Pre-generate all item visuals used in the inventory.\n" +"This increases startup time, but runs smoother in-game.\n" +"The generated textures can easily exceed your VRAM, causing artifacts in the " +"inventory." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Preload inventory textures" +msgstr "正在載入材質..." + +#: src/settings_translation_file.cpp +msgid "Prevent mods from doing insecure things like running shell commands." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler data print interval. 0 = disable. Useful for developers." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiler toggle key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Profiling print interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Radius of cloud area stated in number of 64 node cloud squares.\n" +"Values larger than 26 will start to produce sharp cutoffs at cloud area " +"corners." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Random input" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Range select key" +msgstr "選擇範圍" + +#: src/settings_translation_file.cpp +msgid "Remote media" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Remote port" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Replaces the default main menu with a custom one." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Right key" +msgstr "右邊選單鍵" + +#: src/settings_translation_file.cpp +msgid "Rightclick repetition interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Rollback recording" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Round minimap" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Save the map received by the client on disk." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Saving map received from server" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Scale gui by a user specified value.\n" +"Use a nearest-neighbor-anti-alias filter to scale the GUI.\n" +"This will smooth over some of the rough edges, and blend\n" +"pixels when scaling down, at the cost of blurring some\n" +"edge pixels when images are scaled by non-integer sizes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen height" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Screen width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Screenshot" +msgstr "螢幕截圖" + +#: src/settings_translation_file.cpp +msgid "Screenshot folder" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Security" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "See http://www.sqlite.org/pragma.html#pragma_synchronous" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box border color (R,G,B)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box color" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Selection box width" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server / Singleplayer" +msgstr "開始單人遊戲" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server URL" +msgstr "伺服器" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server address" +msgstr "伺服器埠" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server description" +msgstr "伺服器埠" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server name" +msgstr "伺服器" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Server port" +msgstr "伺服器埠" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist URL" +msgstr "公共伺服器清單" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Serverlist file" +msgstr "公共伺服器清單" + +#: src/settings_translation_file.cpp +msgid "" +"Set the language. Leave empty to use the system language.\n" +"A restart is required after changing this." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving leaves.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving plants.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Set to true enables waving water.\n" +"Requires shaders to be enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shaders" +msgstr "著色器" + +#: src/settings_translation_file.cpp +msgid "" +"Shaders allow advanced visul effects and may increase performance on some " +"video cards.\n" +"Thy only work with the OpenGL video backend." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shape of the minimap. Enabled = round, disabled = square." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Show debug info" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Shutdown message" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Size of chunks to be generated at once by mapgen, stated in mapblocks (16 " +"nodes)." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Smooth lighting" +msgstr "平滑光線" + +#: src/settings_translation_file.cpp +msgid "" +"Smooths camera when moving and looking arround.\n" +"Useful for recording videos." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera in cinematic mode. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Smooths rotation of camera. 0 to disable." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Sneak key" +msgstr "潛行" + +#: src/settings_translation_file.cpp +msgid "Sound" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Specifies URL from which client fetches media instead of using UDP.\n" +"$filename should be accessible from $remote_media$filename via cURL\n" +"(obviously, remote_media should end with a slash).\n" +"Files that are not present will be fetched the usual way." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Static spawnpoint" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Strength of generated normalmaps." +msgstr "生成一般地圖" + +#: src/settings_translation_file.cpp +msgid "Strength of parallax." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Strict protocol checking" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Synchronous SQLite" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Texture path" +msgstr "材質包" + +#: src/settings_translation_file.cpp +msgid "" +"The allowed adjustment range for the automatic rendering range adjustment.\n" +"Set this to be equal to viewing range minimum to disable the auto-adjustment " +"algorithm." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The network interface that the server listens on." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The privileges that new users automatically get.\n" +"See /privs in game for a full list on your server and mod configuration." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "The rendering back-end for Irrlicht." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The strength (darkness) of node ambient-occlusion shading.\n" +"Lower is darker, Higher is lighter. The valid range of values for this\n" +"setting is 0.25 to 4.0 inclusive. If the value is out of range it will be\n" +"set to the nearest valid value." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time (in seconds) that the liquids queue may grow beyond processing\n" +"capacity until an attempt is made to decrease its size by dumping old queue\n" +"items. A value of 0 disables the functionality." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"The time in seconds it takes between repeated right clicks when holding the " +"right mouse button." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "This font will be used for certain languages." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Time in seconds for item entity (dropped items) to live.\n" +"Setting it to -1 disables the feature." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time send interval" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Time speed" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Timeout for client to remove unused map data from memory." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"To reduce lag, block transfers are slowed down when a player is building " +"something.\n" +"This determines how long they are slowed down after placing or removing a " +"node." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Toggle camera mode key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Tooltip delay" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Trilinear filtering" +msgstr "三線性過濾器" + +#: src/settings_translation_file.cpp +msgid "" +"True = 256\n" +"False = 128\n" +"Useable to make minimap smoother on slower machines." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Trusted mods" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "URL to the server list displayed in the Multiplayer Tab." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unlimited player transfer distance" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Unload unused server data" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use 3D cloud look instead of flat." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use a cloud animation for the main menu background." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use anisotropic filtering when viewing at textures from an angle." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use bilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Use key" +msgstr "按下按鍵" + +#: src/settings_translation_file.cpp +msgid "Use mip mapping to scale textures. May slightly increase performance." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Use trilinear filtering when scaling textures." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Useful for mod developers." +msgstr "先前的核心開發者" + +#: src/settings_translation_file.cpp +msgid "V-Sync" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical initial window size." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Vertical screen synchronization." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Video driver" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View bobbing" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range decrease key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "View range increase key" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range maximum" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Viewing range minimum" +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Volume" +msgstr "音量" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Walking speed" +msgstr "葉子擺動" + +#: src/settings_translation_file.cpp +msgid "Wanted FPS" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water level" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Water surface level of the world." +msgstr "" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving Nodes" +msgstr "葉子擺動" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving leaves" +msgstr "葉子擺動" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving plants" +msgstr "植物擺動" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water" +msgstr "波動的水" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water height" +msgstr "波動的水" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water length" +msgstr "波動的水" + +#: src/settings_translation_file.cpp +#, fuzzy +msgid "Waving water speed" +msgstr "波動的水" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter is true, all GUI images need to be\n" +"filtered in software, but some images are generated directly\n" +"to hardware (e.g. render-to-texture for nodes in inventory)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When gui_scaling_filter_txr2img is true, copy those images\n" +"from hardware to software for scaling. When false, fall back\n" +"to the old scaling method, for video drivers that don't\n" +"propery support downloading textures back from hardware." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"When using bilinear/trilinear/anisotropic filters, low-resolution textures\n" +"can be blurred, so automatically upscale them with nearest-neighbor\n" +"interpolation to preserve crisp pixels. This sets the minimum texture size\n" +"for the upscaled textures; higher values look sharper, but require more\n" +"memory. Powers of 2 are recommended. Setting this higher than 1 may not\n" +"have a visible effect unless bilinear/trilinear/anisotropic filtering is\n" +"enabled." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Where the map generator stops.\n" +"Please note:\n" +"- Limited to 31000 (setting above has no effect)\n" +"- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n" +"- Those groups have an offset of -32, -32 nodes from the origin.\n" +"- Only groups which are within the map_generation_limit are generated" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether freetype fonts are used, requires freetype support to be compiled in." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether node texture animations should be desynchronized per mapblock." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether players are shown to clients without any range limit.\n" +"Deprecated, use the setting player_transfer_distance instead." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to allow players to damage and kill each other." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to ask clients to reconnect after a (Lua) crash.\n" +"Set this to true if your server is set up to restart automatically." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Whether to fog out the end of the visible area." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"Whether to show the client debug info (has the same effect as hitting F5)." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "Width of the selectionbox's lines around nodes." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "" +"World directory (everything in the world is stored here).\n" +"Not needed if starting from the main menu." +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL file download timeout" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL parallel limit" +msgstr "" + +#: src/settings_translation_file.cpp +msgid "cURL timeout" +msgstr "" + +#~ msgid "To enable shaders the OpenGL driver needs to be used." +#~ msgstr "要啟用著色器,必須使用 OpenGL 驅動程式。" + +#~ msgid "Touchthreshold (px)" +#~ msgstr "碰觸限值(像素)" + +#~ msgid "Touch free target" +#~ msgstr "碰觸自由目標" + +#~ msgid "Scaling factor applied to menu elements: " +#~ msgstr "套用在選單元素的縮放係數: " + +#~ msgid "Reset singleplayer world" +#~ msgstr "重置單人遊戲世界" + +#~ msgid "Antialiasing:" +#~ msgstr "反鋸齒:" + +#~ msgid "Texturing:" +#~ msgstr "紋理:" + +#~ msgid "Opaque Water" +#~ msgstr "不透明水" + +#~ msgid "No!!!" +#~ msgstr "否!!!" + +#~ msgid "Are you sure to reset your singleplayer world?" +#~ msgstr "您確定要要重置您的單人遊戲世界嗎?" + +#~ msgid "8x" +#~ msgstr "8x" + +#~ msgid "4x" +#~ msgstr "4x" + +#~ msgid "2x" +#~ msgstr "2x" + +#~ msgid "Mipmap + Aniso. Filter" +#~ msgstr "Mip 貼圖 + Aniso. 過濾器" + +#~ msgid "Mipmap" +#~ msgstr "Mip 貼圖" + +#~ msgid "No Mipmap" +#~ msgstr "無 Mip 貼圖" + +#~ msgid "Fancy Leaves" +#~ msgstr "華麗葉子" + +#~ msgid "Simple Leaves" +#~ msgstr "簡易葉子" + +#~ msgid "Opaque Leaves" +#~ msgstr "不透明葉子" diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 190f4e9b..72b52436 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -27,6 +27,12 @@ set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING mark_as_advanced(EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH) +if(NOT (BUILD_CLIENT OR BUILD_SERVER)) + message(WARNING "Neither BUILD_CLIENT nor BUILD_SERVER is set! Setting BUILD_SERVER=true") + set(BUILD_SERVER TRUE) +endif() + + option(ENABLE_CURL "Enable cURL support for fetching media" TRUE) set(USE_CURL FALSE) @@ -40,6 +46,15 @@ else() mark_as_advanced(CLEAR CURL_LIBRARY CURL_INCLUDE_DIR) endif() +if(NOT USE_CURL) + if(BUILD_CLIENT) + message(WARNING "cURL is required to load the server list") + endif() + if(BUILD_SERVER) + message(WARNING "cURL is required to announce to the server list") + endif() +endif() + option(ENABLE_GETTEXT "Use GetText for internationalization" FALSE) set(USE_GETTEXT FALSE) @@ -180,6 +195,21 @@ endif(ENABLE_REDIS) find_package(SQLite3 REQUIRED) find_package(Json REQUIRED) +OPTION(ENABLE_SPATIAL "Enable SpatialIndex AreaStore backend" TRUE) +set(USE_SPATIAL FALSE) + +if(ENABLE_SPATIAL) + find_library(SPATIAL_LIBRARY spatialindex) + find_path(SPATIAL_INCLUDE_DIR spatialindex/SpatialIndex.h) + if(SPATIAL_LIBRARY AND SPATIAL_INCLUDE_DIR) + set(USE_SPATIAL TRUE) + message(STATUS "SpatialIndex AreaStore backend enabled.") + include_directories(${SPATIAL_INCLUDE_DIR}) + else(SPATIAL_LIBRARY AND SPATIAL_INCLUDE_DIR) + message(STATUS "SpatialIndex not found!") + endif(SPATIAL_LIBRARY AND SPATIAL_INCLUDE_DIR) +endif(ENABLE_SPATIAL) + if(NOT MSVC) set(USE_GPROF FALSE CACHE BOOL "Use -pg flag for g++") @@ -249,11 +279,18 @@ else() else() set(PLATFORM_LIBS -lrt ${PLATFORM_LIBS}) endif(APPLE) - #set(CLIENT_PLATFORM_LIBS -lXxf86vm) + # This way Xxf86vm is found on OpenBSD too find_library(XXF86VM_LIBRARY Xxf86vm) mark_as_advanced(XXF86VM_LIBRARY) set(CLIENT_PLATFORM_LIBS ${CLIENT_PLATFORM_LIBS} ${XXF86VM_LIBRARY}) + + # Prefer local iconv if installed + find_library(ICONV_LIBRARY iconv) + mark_as_advanced(ICONV_LIBRARY) + if (ICONV_LIBRARY) + set(PLATFORM_LIBS ${PLATFORM_LIBS} ${ICONV_LIBRARY}) + endif() endif() check_include_files(endian.h HAVE_ENDIAN_H) @@ -275,13 +312,14 @@ add_custom_target(GenerateVersion WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") -add_subdirectory(jthread) +add_subdirectory(threading) add_subdirectory(network) add_subdirectory(script) add_subdirectory(unittest) add_subdirectory(util) set(common_SRCS + areastore.cpp ban.cpp cavegen.cpp clientiface.cpp @@ -314,6 +352,7 @@ set(common_SRCS map.cpp mapblock.cpp mapgen.cpp + mapgen_fractal.cpp mapgen_singlenode.cpp mapgen_v5.cpp mapgen_v6.cpp @@ -417,11 +456,13 @@ set(client_SRCS guiVolumeChange.cpp hud.cpp imagefilters.cpp + intlGUIEditBox.cpp keycode.cpp localplayer.cpp main.cpp mapblock_mesh.cpp mesh.cpp + minimap.cpp particles.cpp shader.cpp sky.cpp @@ -523,6 +564,9 @@ if(BUILD_CLIENT) if (USE_REDIS) target_link_libraries(${PROJECT_NAME} ${REDIS_LIBRARY}) endif() + if (USE_SPATIAL) + target_link_libraries(${PROJECT_NAME} ${SPATIAL_LIBRARY}) + endif() endif(BUILD_CLIENT) @@ -547,6 +591,9 @@ if(BUILD_SERVER) if (USE_REDIS) target_link_libraries(${PROJECT_NAME}server ${REDIS_LIBRARY}) endif() + if (USE_SPATIAL) + target_link_libraries(${PROJECT_NAME}server ${SPATIAL_LIBRARY}) + endif() if(USE_CURL) target_link_libraries( ${PROJECT_NAME}server diff --git a/src/areastore.cpp b/src/areastore.cpp new file mode 100644 index 00000000..b75c05ca --- /dev/null +++ b/src/areastore.cpp @@ -0,0 +1,343 @@ +/* +Minetest +Copyright (C) 2015 est31 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 3.0 of the License, or +(at your option) any later version. + +This program 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 Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "areastore.h" +#include "util/serialize.h" +#include "util/container.h" + +#if USE_SPATIAL + #include + #include + #include +#endif + +#define AST_SMALLER_EQ_AS(p, q) (((p).X <= (q).X) && ((p).Y <= (q).Y) && ((p).Z <= (q).Z)) + +#define AST_OVERLAPS_IN_DIMENSION(amine, amaxe, b, d) \ + (!(((amine).d > (b)->maxedge.d) || ((amaxe).d < (b)->minedge.d))) + +#define AST_CONTAINS_PT(a, p) (AST_SMALLER_EQ_AS((a)->minedge, (p)) && \ + AST_SMALLER_EQ_AS((p), (a)->maxedge)) + +#define AST_CONTAINS_AREA(amine, amaxe, b) \ + (AST_SMALLER_EQ_AS((amine), (b)->minedge) \ + && AST_SMALLER_EQ_AS((b)->maxedge, (amaxe))) + +#define AST_AREAS_OVERLAP(amine, amaxe, b) \ + (AST_OVERLAPS_IN_DIMENSION((amine), (amaxe), (b), X) && \ + AST_OVERLAPS_IN_DIMENSION((amine), (amaxe), (b), Y) && \ + AST_OVERLAPS_IN_DIMENSION((amine), (amaxe), (b), Z)) + +u16 AreaStore::size() const +{ + return areas_map.size(); +} + +u32 AreaStore::getFreeId(v3s16 minedge, v3s16 maxedge) +{ + int keep_on = 100; + while (keep_on--) { + m_highest_id++; + // Handle overflows, we dont want to return 0 + if (m_highest_id == AREA_ID_INVALID) + m_highest_id++; + if (areas_map.find(m_highest_id) == areas_map.end()) + return m_highest_id; + } + // search failed + return AREA_ID_INVALID; +} + +const Area *AreaStore::getArea(u32 id) const +{ + const Area *res = NULL; + std::map::const_iterator itr = areas_map.find(id); + if (itr != areas_map.end()) { + res = &itr->second; + } + return res; +} + +#if 0 +Currently, serialisation is commented out. This is because of multiple reasons: +1. Why do we store the areastore into a file, why not into the database? +2. We don't use libspatial's serialisation, but we should, or perhaps not, because + it would remove the ability to switch. Perhaps write migration routines? +3. Various things need fixing, e.g. the size is serialized as + c++ implementation defined size_t +bool AreaStore::deserialize(std::istream &is) +{ + u8 ver = readU8(is); + if (ver != 1) + return false; + u16 count_areas = readU16(is); + for (u16 i = 0; i < count_areas; i++) { + // deserialize an area + Area a; + a.id = readU32(is); + a.minedge = readV3S16(is); + a.maxedge = readV3S16(is); + a.datalen = readU16(is); + a.data = new char[a.datalen]; + is.read((char *) a.data, a.datalen); + insertArea(a); + } + return true; +} + + +static bool serialize_area(void *ostr, Area *a) +{ + std::ostream &os = *((std::ostream *) ostr); + writeU32(os, a->id); + writeV3S16(os, a->minedge); + writeV3S16(os, a->maxedge); + writeU16(os, a->datalen); + os.write(a->data, a->datalen); + + return false; +} + + +void AreaStore::serialize(std::ostream &os) const +{ + // write initial data + writeU8(os, 1); // serialisation version + writeU16(os, areas_map.size()); //DANGER: not platform independent + forEach(&serialize_area, &os); +} + +#endif + +void AreaStore::invalidateCache() +{ + if (cache_enabled) { + m_res_cache.invalidate(); + } +} + +void AreaStore::setCacheParams(bool enabled, u8 block_radius, size_t limit) +{ + cache_enabled = enabled; + m_cacheblock_radius = MYMAX(block_radius, 16); + m_res_cache.setLimit(MYMAX(limit, 20)); + invalidateCache(); +} + +void AreaStore::cacheMiss(void *data, const v3s16 &mpos, std::vector *dest) +{ + AreaStore *as = (AreaStore *)data; + u8 r = as->m_cacheblock_radius; + + // get the points at the edges of the mapblock + v3s16 minedge(mpos.X * r, mpos.Y * r, mpos.Z * r); + v3s16 maxedge( + minedge.X + r - 1, + minedge.Y + r - 1, + minedge.Z + r - 1); + + as->getAreasInArea(dest, minedge, maxedge, true); + + /* infostream << "Cache miss with " << dest->size() << " areas, between (" + << minedge.X << ", " << minedge.Y << ", " << minedge.Z + << ") and (" + << maxedge.X << ", " << maxedge.Y << ", " << maxedge.Z + << ")" << std::endl; // */ +} + +void AreaStore::getAreasForPos(std::vector *result, v3s16 pos) +{ + if (cache_enabled) { + v3s16 mblock = getContainerPos(pos, m_cacheblock_radius); + const std::vector *pre_list = m_res_cache.lookupCache(mblock); + + size_t s_p_l = pre_list->size(); + for (size_t i = 0; i < s_p_l; i++) { + Area *b = (*pre_list)[i]; + if (AST_CONTAINS_PT(b, pos)) { + result->push_back(b); + } + } + } else { + return getAreasForPosImpl(result, pos); + } +} + + +//// +// VectorAreaStore +//// + + +void VectorAreaStore::insertArea(const Area &a) +{ + areas_map[a.id] = a; + m_areas.push_back(&(areas_map[a.id])); + invalidateCache(); +} + +void VectorAreaStore::reserve(size_t count) +{ + m_areas.reserve(count); +} + +bool VectorAreaStore::removeArea(u32 id) +{ + std::map::iterator itr = areas_map.find(id); + if (itr != areas_map.end()) { + size_t msiz = m_areas.size(); + for (size_t i = 0; i < msiz; i++) { + Area * b = m_areas[i]; + if (b->id == id) { + areas_map.erase(itr); + m_areas.erase(m_areas.begin() + i); + invalidateCache(); + return true; + } + } + // we should never get here, it means we did find it in map, + // but not in the vector + } + return false; +} + +void VectorAreaStore::getAreasForPosImpl(std::vector *result, v3s16 pos) +{ + size_t msiz = m_areas.size(); + for (size_t i = 0; i < msiz; i++) { + Area *b = m_areas[i]; + if (AST_CONTAINS_PT(b, pos)) { + result->push_back(b); + } + } +} + +void VectorAreaStore::getAreasInArea(std::vector *result, + v3s16 minedge, v3s16 maxedge, bool accept_overlap) +{ + size_t msiz = m_areas.size(); + for (size_t i = 0; i < msiz; i++) { + Area * b = m_areas[i]; + if (accept_overlap ? AST_AREAS_OVERLAP(minedge, maxedge, b) : + AST_CONTAINS_AREA(minedge, maxedge, b)) { + result->push_back(b); + } + } +} + +#if 0 +bool VectorAreaStore::forEach(bool (*callback)(void *args, Area *a), void *args) const +{ + size_t msiz = m_areas.size(); + for (size_t i = 0; i < msiz; i++) { + if (callback(args, m_areas[i])) { + return true; + } + } + return false; +} +#endif + +#if USE_SPATIAL + +static inline SpatialIndex::Region get_spatial_region(const v3s16 minedge, + const v3s16 maxedge) +{ + const double p_low[] = {(double)minedge.X, + (double)minedge.Y, (double)minedge.Z}; + const double p_high[] = {(double)maxedge.X, (double)maxedge.Y, + (double)maxedge.Z}; + return SpatialIndex::Region(p_low, p_high, 3); +} + +static inline SpatialIndex::Point get_spatial_point(const v3s16 pos) +{ + const double p[] = {(double)pos.X, (double)pos.Y, (double)pos.Z}; + return SpatialIndex::Point(p, 3); +} + + +void SpatialAreaStore::insertArea(const Area &a) +{ + areas_map[a.id] = a; + m_tree->insertData(0, NULL, get_spatial_region(a.minedge, a.maxedge), a.id); + invalidateCache(); +} + +bool SpatialAreaStore::removeArea(u32 id) +{ + std::map::iterator itr = areas_map.find(id); + if (itr != areas_map.end()) { + Area *a = &itr->second; + bool result = m_tree->deleteData(get_spatial_region(a->minedge, + a->maxedge), id); + invalidateCache(); + return result; + } else { + return false; + } +} + +void SpatialAreaStore::getAreasForPosImpl(std::vector *result, v3s16 pos) +{ + VectorResultVisitor visitor(result, this); + m_tree->pointLocationQuery(get_spatial_point(pos), visitor); +} + +void SpatialAreaStore::getAreasInArea(std::vector *result, + v3s16 minedge, v3s16 maxedge, bool accept_overlap) +{ + VectorResultVisitor visitor(result, this); + if (accept_overlap) { + m_tree->intersectsWithQuery(get_spatial_region(minedge, maxedge), + visitor); + } else { + m_tree->containsWhatQuery(get_spatial_region(minedge, maxedge), visitor); + } +} + +#if 0 +bool SpatialAreaStore::forEach(bool (*callback)(void *args, Area *a), void *args) const +{ + // TODO ?? (this is only needed for serialisation, but libspatial has its own serialisation) + return false; +} +#endif + +SpatialAreaStore::~SpatialAreaStore() +{ + delete m_tree; +} + +SpatialAreaStore::SpatialAreaStore() +{ + m_storagemanager = + SpatialIndex::StorageManager::createNewMemoryStorageManager(); + SpatialIndex::id_type id; + m_tree = SpatialIndex::RTree::createNewRTree( + *m_storagemanager, + .7, // Fill factor + 100, // Index capacity + 100, // Leaf capacity + 3, // dimension :) + SpatialIndex::RTree::RV_RSTAR, + id); +} + +#endif diff --git a/src/areastore.h b/src/areastore.h new file mode 100644 index 00000000..a08da507 --- /dev/null +++ b/src/areastore.h @@ -0,0 +1,196 @@ +/* +Minetest +Copyright (C) 2015 est31 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 3.0 of the License, or +(at your option) any later version. + +This program 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 Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef AREASTORE_H_ +#define AREASTORE_H_ + +#include "irr_v3d.h" +#include "noise.h" // for PcgRandom +#include +#include +#include +#include +#include "util/container.h" +#include "util/numeric.h" +#ifndef ANDROID + #include "cmake_config.h" +#endif +#if USE_SPATIAL + #include + #include "util/serialize.h" +#endif + +#define AST_EXTREMIFY(min, max, pa, pb) \ + (min).X = MYMIN((pa).X, (pb).X); \ + (min).Y = MYMIN((pa).Y, (pb).Y); \ + (min).Z = MYMIN((pa).Z, (pb).Z); \ + (max).X = MYMAX((pa).X, (pb).X); \ + (max).Y = MYMAX((pa).Y, (pb).Y); \ + (max).Z = MYMAX((pa).Z, (pb).Z); + +#define AREA_ID_INVALID 0 + +struct Area { + Area(const v3s16 &minedge, const v3s16 &maxedge) + { + this->minedge = minedge; + this->maxedge = maxedge; + } + + Area() {} + + void extremifyEdges() + { + v3s16 nminedge; + v3s16 nmaxedge; + + AST_EXTREMIFY(nminedge, nmaxedge, minedge, maxedge) + + maxedge = nmaxedge; + minedge = nminedge; + } + + u32 id; + v3s16 minedge; + v3s16 maxedge; + std::string data; +}; + +std::vector get_areastore_typenames(); + +class AreaStore { +protected: + // TODO change to unordered_map when we can + std::map areas_map; + void invalidateCache(); + virtual void getAreasForPosImpl(std::vector *result, v3s16 pos) = 0; + bool cache_enabled; // don't write to this from subclasses, only read. +public: + virtual void insertArea(const Area &a) = 0; + virtual void reserve(size_t count) {}; + virtual bool removeArea(u32 id) = 0; + void getAreasForPos(std::vector *result, v3s16 pos); + virtual void getAreasInArea(std::vector *result, + v3s16 minedge, v3s16 maxedge, bool accept_overlap) = 0; + +#if 0 + // calls a passed function for every stored area, until the + // callback returns true. If that happens, it returns true, + // if the search is exhausted, it returns false + virtual bool forEach(bool (*callback)(void *args, Area *a), void *args) const = 0; +#endif + + virtual ~AreaStore() + {} + + AreaStore() : + cache_enabled(true), + m_cacheblock_radius(64), + m_res_cache(1000, &cacheMiss, this), + m_highest_id(0) + { + } + + void setCacheParams(bool enabled, u8 block_radius, size_t limit); + + u32 getFreeId(v3s16 minedge, v3s16 maxedge); + const Area *getArea(u32 id) const; + u16 size() const; +#if 0 + bool deserialize(std::istream &is); + void serialize(std::ostream &is) const; +#endif +private: + static void cacheMiss(void *data, const v3s16 &mpos, std::vector *dest); + u8 m_cacheblock_radius; // if you modify this, call invalidateCache() + LRUCache > m_res_cache; + u32 m_highest_id; + +}; + + +class VectorAreaStore : public AreaStore { +protected: + virtual void getAreasForPosImpl(std::vector *result, v3s16 pos); +public: + virtual void insertArea(const Area &a); + virtual void reserve(size_t count); + virtual bool removeArea(u32 id); + virtual void getAreasInArea(std::vector *result, + v3s16 minedge, v3s16 maxedge, bool accept_overlap); + // virtual bool forEach(bool (*callback)(void *args, Area *a), void *args) const; +private: + std::vector m_areas; +}; + +#if USE_SPATIAL + +class SpatialAreaStore : public AreaStore { +protected: + virtual void getAreasForPosImpl(std::vector *result, v3s16 pos); +public: + SpatialAreaStore(); + virtual void insertArea(const Area &a); + virtual bool removeArea(u32 id); + virtual void getAreasInArea(std::vector *result, + v3s16 minedge, v3s16 maxedge, bool accept_overlap); + // virtual bool forEach(bool (*callback)(void *args, Area *a), void *args) const; + + virtual ~SpatialAreaStore(); +private: + SpatialIndex::ISpatialIndex *m_tree; + SpatialIndex::IStorageManager *m_storagemanager; + + class VectorResultVisitor : public SpatialIndex::IVisitor { + private: + SpatialAreaStore *m_store; + std::vector *m_result; + public: + VectorResultVisitor(std::vector *result, SpatialAreaStore *store) + { + m_store = store; + m_result = result; + } + + virtual void visitNode(const SpatialIndex::INode &in) + { + } + + virtual void visitData(const SpatialIndex::IData &in) + { + u32 id = in.getIdentifier(); + + std::map::iterator itr = m_store->areas_map.find(id); + assert(itr != m_store->areas_map.end()); + m_result->push_back(&itr->second); + } + + virtual void visitData(std::vector &v) + { + for (size_t i = 0; i < v.size(); i++) + visitData(*(v[i])); + } + + ~VectorResultVisitor() {} + }; +}; + +#endif + +#endif /* AREASTORE_H_ */ diff --git a/src/ban.cpp b/src/ban.cpp index 6d52435d..feb692e6 100644 --- a/src/ban.cpp +++ b/src/ban.cpp @@ -19,7 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "ban.h" #include -#include "jthread/jmutexautolock.h" +#include "threading/mutex_auto_lock.h" #include #include #include "strfnd.h" @@ -36,7 +36,7 @@ BanManager::BanManager(const std::string &banfilepath): } catch(SerializationError &e) { - infostream<<"WARNING: BanManager: creating " + warningstream<<"BanManager: creating " <first == ip_or_name || it->second == ip_or_name @@ -110,7 +110,7 @@ std::string BanManager::getBanDescription(const std::string &ip_or_name) std::string BanManager::getBanName(const std::string &ip) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); StringMap::iterator it = m_ips.find(ip); if (it == m_ips.end()) return ""; @@ -119,14 +119,14 @@ std::string BanManager::getBanName(const std::string &ip) void BanManager::add(const std::string &ip, const std::string &name) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); m_ips[ip] = name; m_modified = true; } void BanManager::remove(const std::string &ip_or_name) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); for (StringMap::iterator it = m_ips.begin(); it != m_ips.end();) { if ((it->first == ip_or_name) || (it->second == ip_or_name)) { m_ips.erase(it++); @@ -140,7 +140,7 @@ void BanManager::remove(const std::string &ip_or_name) bool BanManager::isModified() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); return m_modified; } diff --git a/src/ban.h b/src/ban.h index 0783abee..d79973d3 100644 --- a/src/ban.h +++ b/src/ban.h @@ -21,9 +21,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #define BAN_HEADER #include "util/string.h" -#include "jthread/jthread.h" -#include "jthread/jmutex.h" +#include "threading/thread.h" +#include "threading/mutex.h" #include "exceptions.h" +#include +#include class BanManager { @@ -40,7 +42,7 @@ public: void remove(const std::string &ip_or_name); bool isModified(); private: - JMutex m_mutex; + Mutex m_mutex; std::string m_banfilepath; StringMap m_ips; bool m_modified; diff --git a/src/basicmacros.h b/src/basicmacros.h new file mode 100644 index 00000000..b47305be --- /dev/null +++ b/src/basicmacros.h @@ -0,0 +1,46 @@ +/* +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 3.0 of the License, or +(at your option) any later version. + +This program 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 Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef BASICMACROS_HEADER +#define BASICMACROS_HEADER + +#include + +#define ARRLEN(x) (sizeof(x) / sizeof((x)[0])) + +#define MYMIN(a, b) ((a) < (b) ? (a) : (b)) + +#define MYMAX(a, b) ((a) > (b) ? (a) : (b)) + +#define CONTAINS(c, v) (std::find((c).begin(), (c).end(), (v)) != (c).end()) + +// To disable copy constructors and assignment operations for some class +// 'Foobar', add the macro DISABLE_CLASS_COPY(Foobar) as a private member. +// Note this also disables copying for any classes derived from 'Foobar' as well +// as classes having a 'Foobar' member. +#define DISABLE_CLASS_COPY(C) \ + C(const C &); \ + C &operator=(const C &) + +// Fail compilation if condition expr is not met. +// Note that 'msg' must follow the format of a valid identifier, e.g. +// STATIC_ASSERT(sizeof(foobar_t) == 40), foobar_t_is_wrong_size); +#define STATIC_ASSERT(expr, msg) typedef char msg[!!(expr) * 2 - 1] + +#endif diff --git a/src/camera.cpp b/src/camera.cpp index b682fe8c..f9a518aa 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -79,7 +79,7 @@ Camera::Camera(scene::ISceneManager* smgr, MapDrawControl& draw_control, m_camera_mode(CAMERA_MODE_FIRST) { - //dstream<<__FUNCTION_NAME<getRootSceneNode(), m_wieldmgr, -1, false); m_wieldnode->setItem(ItemStack(), m_gamedef); m_wieldnode->drop(); // m_wieldmgr grabbed it - m_wieldlightnode = m_wieldmgr->addLightSceneNode(NULL, v3f(0.0, 50.0, 0.0)); /* TODO: Add a callback function so these can be updated when a setting * changes. At this point in time it doesn't matter (e.g. /set @@ -162,55 +161,37 @@ void Camera::step(f32 dtime) { //f32 offset = dtime * m_view_bobbing_speed * 0.035; f32 offset = dtime * m_view_bobbing_speed * 0.030; - if (m_view_bobbing_state == 2) - { -#if 0 + if (m_view_bobbing_state == 2) { // Animation is getting turned off - if (m_view_bobbing_anim < 0.5) + if (m_view_bobbing_anim < 0.25) { m_view_bobbing_anim -= offset; - else - m_view_bobbing_anim += offset; - if (m_view_bobbing_anim <= 0 || m_view_bobbing_anim >= 1) - { - m_view_bobbing_anim = 0; - m_view_bobbing_state = 0; - } -#endif -#if 1 - // Animation is getting turned off - if(m_view_bobbing_anim < 0.25) - { - m_view_bobbing_anim -= offset; - } else if(m_view_bobbing_anim > 0.75) { + } else if (m_view_bobbing_anim > 0.75) { m_view_bobbing_anim += offset; } - if(m_view_bobbing_anim < 0.5) - { + + if (m_view_bobbing_anim < 0.5) { m_view_bobbing_anim += offset; - if(m_view_bobbing_anim > 0.5) + if (m_view_bobbing_anim > 0.5) m_view_bobbing_anim = 0.5; } else { m_view_bobbing_anim -= offset; - if(m_view_bobbing_anim < 0.5) + if (m_view_bobbing_anim < 0.5) m_view_bobbing_anim = 0.5; } - if(m_view_bobbing_anim <= 0 || m_view_bobbing_anim >= 1 || - fabs(m_view_bobbing_anim - 0.5) < 0.01) - { + + if (m_view_bobbing_anim <= 0 || m_view_bobbing_anim >= 1 || + fabs(m_view_bobbing_anim - 0.5) < 0.01) { m_view_bobbing_anim = 0; m_view_bobbing_state = 0; } -#endif } - else - { + else { float was = m_view_bobbing_anim; m_view_bobbing_anim = my_modf(m_view_bobbing_anim + offset); bool step = (was == 0 || (was < 0.5f && m_view_bobbing_anim >= 0.5f) || (was > 0.5f && m_view_bobbing_anim <= 0.5f)); - if(step) - { + if(step) { MtEvent *e = new SimpleTriggerEvent("ViewBobbingStep"); m_gamedef->event()->put(e); } @@ -469,11 +450,7 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, m_wieldnode->setPosition(wield_position); m_wieldnode->setRotation(wield_rotation); - // Shine light upon the wield mesh - video::SColor black(255,0,0,0); - m_wieldmgr->setAmbientLight(player->light_color.getInterpolated(black, 0.7)); - m_wieldlightnode->getLightData().DiffuseColor = player->light_color.getInterpolated(black, 0.3); - m_wieldlightnode->setPosition(v3f(30+5*sin(2*player->getYaw()*M_PI/180), -50, 0)); + m_wieldnode->setColor(player->light_color); // Render distance feedback loop updateViewingRange(frametime, busytime); @@ -483,7 +460,7 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime, // start (or continue) the view bobbing animation. v3f speed = player->getSpeed(); const bool movement_XZ = hypot(speed.X, speed.Z) > BS; - const bool movement_Y = abs(speed.Y) > BS; + const bool movement_Y = fabs(speed.Y) > BS; const bool walking = movement_XZ && player->touching_ground; const bool swimming = (movement_XZ || player->swimming_vertical) && player->in_liquid; @@ -517,7 +494,7 @@ void Camera::updateViewingRange(f32 frametime_in, f32 busytime_in) return; m_frametime_counter = 0.2; // Same as ClientMap::updateDrawList interval - /*dstream<<__FUNCTION_NAME + /*dstream<mg = mg; - this->vm = mg->vm; - this->ndef = mg->ndef; - this->water_level = mg->water_level; - this->ps = ps; +CaveV5::CaveV5(MapgenV5 *mg, PseudoRandom *ps) +{ + this->mg = mg; + this->vm = mg->vm; + this->ndef = mg->ndef; + this->water_level = mg->water_level; + this->ps = ps; this->c_water_source = mg->c_water_source; this->c_lava_source = mg->c_lava_source; this->c_ice = mg->c_ice; @@ -45,8 +47,8 @@ CaveV5::CaveV5(MapgenV5 *mg, PseudoRandom *ps) { dswitchint = ps->range(1, 14); flooded = ps->range(1, 2) == 2; - part_max_length_rs = ps->range(2, 4); - tunnel_routepoints = ps->range(5, ps->range(15, 30)); + part_max_length_rs = ps->range(2, 4); + tunnel_routepoints = ps->range(5, ps->range(15, 30)); min_tunnel_diameter = 5; max_tunnel_diameter = ps->range(7, ps->range(8, 24)); @@ -54,7 +56,8 @@ CaveV5::CaveV5(MapgenV5 *mg, PseudoRandom *ps) { } -void CaveV5::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) { +void CaveV5::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) +{ node_min = nmin; node_max = nmax; main_direction = v3f(0, 0, 0); @@ -115,8 +118,8 @@ void CaveV5::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) { } -void CaveV5::makeTunnel(bool dirswitch) { - +void CaveV5::makeTunnel(bool dirswitch) +{ // Randomize size s16 min_d = min_tunnel_diameter; s16 max_d = max_tunnel_diameter; @@ -138,7 +141,7 @@ void CaveV5::makeTunnel(bool dirswitch) { (float)(ps->next() % maxlen.Z) - (float)maxlen.Z / 2 ); - // Do not make large caves that are above ground. + // Do not make caves that are above ground. // It is only necessary to check the startpoint and endpoint. v3s16 orpi(orp.X, orp.Y, orp.Z); v3s16 veci(vec.X, vec.Y, vec.Z); @@ -157,7 +160,7 @@ void CaveV5::makeTunnel(bool dirswitch) { p = orpi + of + rs / 2; if (p.Z >= node_min.Z && p.Z <= node_max.Z && - p.X >= node_min.X && p.X <= node_max.X) { + p.X >= node_min.X && p.X <= node_max.X) { u32 index = (p.Z - node_min.Z) * mg->ystride + (p.X - node_min.X); s16 h = mg->heightmap[index]; if (h < p.Y) @@ -193,20 +196,16 @@ void CaveV5::makeTunnel(bool dirswitch) { // Every second section is rough bool randomize_xz = (ps->range(1, 2) == 1); - // Make a ravine every once in a while if it's long enough - //float xylen = vec.X * vec.X + vec.Z * vec.Z; - //disable ravines for now - bool is_ravine = false; //(xylen > 500.0) && !large_cave && (ps->range(1, 8) == 1); - // Carve routes for (float f = 0; f < 1.0; f += 1.0 / veclen) - carveRoute(vec, f, randomize_xz, is_ravine); + carveRoute(vec, f, randomize_xz); orp = rp; } -void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { +void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz) +{ MapNode airnode(CONTENT_AIR); MapNode waternode(c_water_source); MapNode lavanode(c_lava_source); @@ -215,7 +214,7 @@ void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { startp += of; float nval = NoisePerlin3D(np_caveliquids, startp.X, - startp.Y, startp.Z, mg->seed); + startp.Y, startp.Z, mg->seed); MapNode liquidnode = nval < 0.40 ? lavanode : waternode; v3f fp = orp + vec * f; @@ -230,15 +229,12 @@ void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { d1 += ps->range(-1, 1); } - bool should_make_cave_hole = ps->range(1, 10) == 1; - for (s16 z0 = d0; z0 <= d1; z0++) { s16 si = rs / 2 - MYMAX(0, abs(z0) - rs / 7 - 1); for (s16 x0 = -si - ps->range(0,1); x0 <= si - 1 + ps->range(0,1); x0++) { s16 maxabsxz = MYMAX(abs(x0), abs(z0)); - s16 si2 = is_ravine ? MYMIN(ps->range(25, 26), ar.Y) : - rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1); + s16 si2 = rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1); for (s16 y0 = -si2; y0 <= si2; y0++) { if (large_cave_is_flat) { @@ -250,14 +246,6 @@ void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { v3s16 p(cp.X + x0, cp.Y + y0, cp.Z + z0); p += of; - if (!is_ravine && mg->heightmap && should_make_cave_hole && - p.X <= node_max.X && p.Z <= node_max.Z) { - int maplen = node_max.X - node_min.X + 1; - int idx = (p.Z - node_min.Z) * maplen + (p.X - node_min.X); - if (p.Y >= mg->heightmap[idx] - 2) - continue; - } - if (vm->m_area.contains(p) == false) continue; @@ -269,10 +257,13 @@ void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { int full_ymin = node_min.Y - MAP_BLOCKSIZE; int full_ymax = node_max.Y + MAP_BLOCKSIZE; - if (flooded && full_ymin < water_level && full_ymax > water_level) - vm->m_data[i] = (p.Y <= water_level) ? waternode : airnode; + if (flooded && full_ymin < water_level && + full_ymax > water_level) + vm->m_data[i] = (p.Y <= water_level) ? + waternode : airnode; else if (flooded && full_ymax < water_level) - vm->m_data[i] = (p.Y < startp.Y - 4) ? liquidnode : airnode; + vm->m_data[i] = (p.Y < startp.Y - 4) ? + liquidnode : airnode; else vm->m_data[i] = airnode; } @@ -284,25 +275,26 @@ void CaveV5::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { ///////////////////////////////////////// Caves V6 -CaveV6::CaveV6(MapgenV6 *mg, PseudoRandom *ps, PseudoRandom *ps2, bool is_large_cave) { - this->mg = mg; - this->vm = mg->vm; - this->ndef = mg->ndef; - this->water_level = mg->water_level; - this->large_cave = is_large_cave; - this->ps = ps; - this->ps2 = ps2; +CaveV6::CaveV6(MapgenV6 *mg, PseudoRandom *ps, PseudoRandom *ps2, bool is_large_cave) +{ + this->mg = mg; + this->vm = mg->vm; + this->ndef = mg->ndef; + this->water_level = mg->water_level; + this->large_cave = is_large_cave; + this->ps = ps; + this->ps2 = ps2; this->c_water_source = mg->c_water_source; this->c_lava_source = mg->c_lava_source; min_tunnel_diameter = 2; max_tunnel_diameter = ps->range(2, 6); - dswitchint = ps->range(1, 14); - flooded = true; + dswitchint = ps->range(1, 14); + flooded = true; if (large_cave) { - part_max_length_rs = ps->range(2,4); - tunnel_routepoints = ps->range(5, ps->range(15,30)); + part_max_length_rs = ps->range(2,4); + tunnel_routepoints = ps->range(5, ps->range(15,30)); min_tunnel_diameter = 5; max_tunnel_diameter = ps->range(7, ps->range(8,24)); } else { @@ -314,7 +306,8 @@ CaveV6::CaveV6(MapgenV6 *mg, PseudoRandom *ps, PseudoRandom *ps2, bool is_large_ } -void CaveV6::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) { +void CaveV6::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) +{ node_min = nmin; node_max = nmax; max_stone_y = max_stone_height; @@ -381,7 +374,8 @@ void CaveV6::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) { } -void CaveV6::makeTunnel(bool dirswitch) { +void CaveV6::makeTunnel(bool dirswitch) +{ if (dirswitch && !large_cave) { main_direction = v3f( ((float)(ps->next() % 20) - (float)10) / 10, @@ -427,36 +421,40 @@ void CaveV6::makeTunnel(bool dirswitch) { ); } - // Do not make large caves that are entirely above ground. + // Do not make caves that are entirely above ground, to fix + // shadow bugs caused by overgenerated large caves. // It is only necessary to check the startpoint and endpoint. - if (large_cave) { - v3s16 orpi(orp.X, orp.Y, orp.Z); - v3s16 veci(vec.X, vec.Y, vec.Z); - s16 h1; - s16 h2; + v3s16 orpi(orp.X, orp.Y, orp.Z); + v3s16 veci(vec.X, vec.Y, vec.Z); + s16 h1; + s16 h2; - v3s16 p1 = orpi + veci + of + rs / 2; - if (p1.Z >= node_min.Z && p1.Z <= node_max.Z && - p1.X >= node_min.X && p1.X <= node_max.X) { - u32 index1 = (p1.Z - node_min.Z) * mg->ystride + (p1.X - node_min.X); - h1 = mg->heightmap[index1]; - } else { - h1 = water_level; // If not in heightmap - } - - v3s16 p2 = orpi + of + rs / 2; - if (p2.Z >= node_min.Z && p2.Z <= node_max.Z && - p2.X >= node_min.X && p2.X <= node_max.X) { - u32 index2 = (p2.Z - node_min.Z) * mg->ystride + (p2.X - node_min.X); - h2 = mg->heightmap[index2]; - } else { - h2 = water_level; - } - - if (p1.Y > h1 && p2.Y > h2) // If startpoint and endpoint are above ground - return; + v3s16 p1 = orpi + veci + of + rs / 2; + if (p1.Z >= node_min.Z && p1.Z <= node_max.Z && + p1.X >= node_min.X && p1.X <= node_max.X) { + u32 index1 = (p1.Z - node_min.Z) * mg->ystride + + (p1.X - node_min.X); + h1 = mg->heightmap[index1]; + } else { + h1 = water_level; // If not in heightmap } + v3s16 p2 = orpi + of + rs / 2; + if (p2.Z >= node_min.Z && p2.Z <= node_max.Z && + p2.X >= node_min.X && p2.X <= node_max.X) { + u32 index2 = (p2.Z - node_min.Z) * mg->ystride + + (p2.X - node_min.X); + h2 = mg->heightmap[index2]; + } else { + h2 = water_level; + } + + // If startpoint and endpoint are above ground, + // disable placing of nodes in carveRoute while + // still running all pseudorandom calls to ensure + // caves consistent with existing worlds. + bool tunnel_above_ground = p1.Y > h1 && p2.Y > h2; + vec += main_direction; v3f rp = orp + vec; @@ -487,13 +485,14 @@ void CaveV6::makeTunnel(bool dirswitch) { // Carve routes for (float f = 0; f < 1.0; f += 1.0 / veclen) - carveRoute(vec, f, randomize_xz); + carveRoute(vec, f, randomize_xz, tunnel_above_ground); orp = rp; } -void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz) { +void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz, bool tunnel_above_ground) +{ MapNode airnode(CONTENT_AIR); MapNode waternode(c_water_source); MapNode lavanode(c_lava_source); @@ -516,6 +515,9 @@ void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz) { for (s16 z0 = d0; z0 <= d1; z0++) { s16 si = rs / 2 - MYMAX(0, abs(z0) - rs / 7 - 1); for (s16 x0 = -si - ps->range(0,1); x0 <= si - 1 + ps->range(0,1); x0++) { + if (tunnel_above_ground) + continue; + s16 maxabsxz = MYMAX(abs(x0), abs(z0)); s16 si2 = rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1); for (s16 y0 = -si2; y0 <= si2; y0++) { @@ -540,10 +542,13 @@ void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz) { int full_ymin = node_min.Y - MAP_BLOCKSIZE; int full_ymax = node_max.Y + MAP_BLOCKSIZE; - if (flooded && full_ymin < water_level && full_ymax > water_level) { - vm->m_data[i] = (p.Y <= water_level) ? waternode : airnode; + if (flooded && full_ymin < water_level && + full_ymax > water_level) { + vm->m_data[i] = (p.Y <= water_level) ? + waternode : airnode; } else if (flooded && full_ymax < water_level) { - vm->m_data[i] = (p.Y < startp.Y - 2) ? lavanode : airnode; + vm->m_data[i] = (p.Y < startp.Y - 2) ? + lavanode : airnode; } else { vm->m_data[i] = airnode; } @@ -563,12 +568,13 @@ void CaveV6::carveRoute(v3f vec, float f, bool randomize_xz) { ///////////////////////////////////////// Caves V7 -CaveV7::CaveV7(MapgenV7 *mg, PseudoRandom *ps) { - this->mg = mg; - this->vm = mg->vm; - this->ndef = mg->ndef; - this->water_level = mg->water_level; - this->ps = ps; +CaveV7::CaveV7(MapgenV7 *mg, PseudoRandom *ps) +{ + this->mg = mg; + this->vm = mg->vm; + this->ndef = mg->ndef; + this->water_level = mg->water_level; + this->ps = ps; this->c_water_source = mg->c_water_source; this->c_lava_source = mg->c_lava_source; this->c_ice = mg->c_ice; @@ -577,8 +583,8 @@ CaveV7::CaveV7(MapgenV7 *mg, PseudoRandom *ps) { dswitchint = ps->range(1, 14); flooded = ps->range(1, 2) == 2; - part_max_length_rs = ps->range(2, 4); - tunnel_routepoints = ps->range(5, ps->range(15, 30)); + part_max_length_rs = ps->range(2, 4); + tunnel_routepoints = ps->range(5, ps->range(15, 30)); min_tunnel_diameter = 5; max_tunnel_diameter = ps->range(7, ps->range(8, 24)); @@ -586,7 +592,8 @@ CaveV7::CaveV7(MapgenV7 *mg, PseudoRandom *ps) { } -void CaveV7::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) { +void CaveV7::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) +{ node_min = nmin; node_max = nmax; max_stone_y = max_stone_height; @@ -648,8 +655,8 @@ void CaveV7::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) { } -void CaveV7::makeTunnel(bool dirswitch) { - +void CaveV7::makeTunnel(bool dirswitch) +{ // Randomize size s16 min_d = min_tunnel_diameter; s16 max_d = max_tunnel_diameter; @@ -671,7 +678,7 @@ void CaveV7::makeTunnel(bool dirswitch) { (float)(ps->next() % maxlen.Z) - (float)maxlen.Z / 2 ); - // Do not make large caves that are above ground. + // Do not make caves that are above ground. // It is only necessary to check the startpoint and endpoint. v3s16 orpi(orp.X, orp.Y, orp.Z); v3s16 veci(vec.X, vec.Y, vec.Z); @@ -726,20 +733,16 @@ void CaveV7::makeTunnel(bool dirswitch) { // Every second section is rough bool randomize_xz = (ps->range(1, 2) == 1); - // Make a ravine every once in a while if it's long enough - //float xylen = vec.X * vec.X + vec.Z * vec.Z; - //disable ravines for now - bool is_ravine = false; //(xylen > 500.0) && !large_cave && (ps->range(1, 8) == 1); - // Carve routes for (float f = 0; f < 1.0; f += 1.0 / veclen) - carveRoute(vec, f, randomize_xz, is_ravine); + carveRoute(vec, f, randomize_xz); orp = rp; } -void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { +void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz) +{ MapNode airnode(CONTENT_AIR); MapNode waternode(c_water_source); MapNode lavanode(c_lava_source); @@ -748,8 +751,9 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { startp += of; float nval = NoisePerlin3D(np_caveliquids, startp.X, - startp.Y, startp.Z, mg->seed); - MapNode liquidnode = (nval < 0.40 && node_max.Y < -256) ? lavanode : waternode; + startp.Y, startp.Z, mg->seed); + MapNode liquidnode = (nval < 0.40 && node_max.Y < MGV7_LAVA_DEPTH) ? + lavanode : waternode; v3f fp = orp + vec * f; fp.X += 0.1 * ps->range(-10, 10); @@ -763,15 +767,12 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { d1 += ps->range(-1, 1); } - bool should_make_cave_hole = ps->range(1, 10) == 1; - for (s16 z0 = d0; z0 <= d1; z0++) { s16 si = rs / 2 - MYMAX(0, abs(z0) - rs / 7 - 1); for (s16 x0 = -si - ps->range(0,1); x0 <= si - 1 + ps->range(0,1); x0++) { s16 maxabsxz = MYMAX(abs(x0), abs(z0)); - s16 si2 = is_ravine ? MYMIN(ps->range(25, 26), ar.Y) : - rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1); + s16 si2 = rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1); for (s16 y0 = -si2; y0 <= si2; y0++) { if (large_cave_is_flat) { @@ -783,14 +784,6 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { v3s16 p(cp.X + x0, cp.Y + y0, cp.Z + z0); p += of; - if (!is_ravine && mg->heightmap && should_make_cave_hole && - p.X <= node_max.X && p.Z <= node_max.Z) { - int maplen = node_max.X - node_min.X + 1; - int idx = (p.Z - node_min.Z) * maplen + (p.X - node_min.X); - if (p.Y >= mg->heightmap[idx] - 2) - continue; - } - if (vm->m_area.contains(p) == false) continue; @@ -802,10 +795,13 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { int full_ymin = node_min.Y - MAP_BLOCKSIZE; int full_ymax = node_max.Y + MAP_BLOCKSIZE; - if (flooded && full_ymin < water_level && full_ymax > water_level) - vm->m_data[i] = (p.Y <= water_level) ? waternode : airnode; + if (flooded && full_ymin < water_level && + full_ymax > water_level) + vm->m_data[i] = (p.Y <= water_level) ? + waternode : airnode; else if (flooded && full_ymax < water_level) - vm->m_data[i] = (p.Y < startp.Y - 4) ? liquidnode : airnode; + vm->m_data[i] = (p.Y < startp.Y - 4) ? + liquidnode : airnode; else vm->m_data[i] = airnode; } @@ -813,3 +809,246 @@ void CaveV7::carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine) { } } + +///////////////////////////////////////// Caves Fractal + + +CaveFractal::CaveFractal(MapgenFractal *mg, PseudoRandom *ps) +{ + this->mg = mg; + this->vm = mg->vm; + this->ndef = mg->ndef; + this->water_level = mg->water_level; + this->ps = ps; + this->c_water_source = mg->c_water_source; + this->c_lava_source = mg->c_lava_source; + this->c_ice = mg->c_ice; + this->np_caveliquids = &nparams_caveliquids; + + dswitchint = ps->range(1, 14); + flooded = ps->range(1, 2) == 2; + + part_max_length_rs = ps->range(2, 4); + tunnel_routepoints = ps->range(5, ps->range(15, 30)); + min_tunnel_diameter = 5; + max_tunnel_diameter = ps->range(7, ps->range(8, 24)); + + large_cave_is_flat = (ps->range(0, 1) == 0); +} + + +void CaveFractal::makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height) +{ + node_min = nmin; + node_max = nmax; + main_direction = v3f(0, 0, 0); + + // Allowed route area size in nodes + ar = node_max - node_min + v3s16(1, 1, 1); + // Area starting point in nodes + of = node_min; + + // Allow a bit more + //(this should be more than the maximum radius of the tunnel) + s16 insure = 10; + s16 more = MYMAX(MAP_BLOCKSIZE - max_tunnel_diameter / 2 - insure, 1); + ar += v3s16(1,0,1) * more * 2; + of -= v3s16(1,0,1) * more; + + route_y_min = 0; + // Allow half a diameter + 7 over stone surface + route_y_max = -of.Y + max_stone_y + max_tunnel_diameter / 2 + 7; + + // Limit maximum to area + route_y_max = rangelim(route_y_max, 0, ar.Y - 1); + + s16 min = 0; + if (node_min.Y < water_level && node_max.Y > water_level) { + min = water_level - max_tunnel_diameter/3 - of.Y; + route_y_max = water_level + max_tunnel_diameter/3 - of.Y; + } + route_y_min = ps->range(min, min + max_tunnel_diameter); + route_y_min = rangelim(route_y_min, 0, route_y_max); + + s16 route_start_y_min = route_y_min; + s16 route_start_y_max = route_y_max; + + route_start_y_min = rangelim(route_start_y_min, 0, ar.Y - 1); + route_start_y_max = rangelim(route_start_y_max, route_start_y_min, ar.Y - 1); + + // Randomize starting position + orp = v3f( + (float)(ps->next() % ar.X) + 0.5, + (float)(ps->range(route_start_y_min, route_start_y_max)) + 0.5, + (float)(ps->next() % ar.Z) + 0.5 + ); + + // Add generation notify begin event + v3s16 abs_pos(of.X + orp.X, of.Y + orp.Y, of.Z + orp.Z); + GenNotifyType notifytype = GENNOTIFY_LARGECAVE_BEGIN; + mg->gennotify.addEvent(notifytype, abs_pos); + + // Generate some tunnel starting from orp + for (u16 j = 0; j < tunnel_routepoints; j++) + makeTunnel(j % dswitchint == 0); + + // Add generation notify end event + abs_pos = v3s16(of.X + orp.X, of.Y + orp.Y, of.Z + orp.Z); + notifytype = GENNOTIFY_LARGECAVE_END; + mg->gennotify.addEvent(notifytype, abs_pos); +} + + +void CaveFractal::makeTunnel(bool dirswitch) +{ + // Randomize size + s16 min_d = min_tunnel_diameter; + s16 max_d = max_tunnel_diameter; + rs = ps->range(min_d, max_d); + s16 rs_part_max_length_rs = rs * part_max_length_rs; + + v3s16 maxlen; + maxlen = v3s16( + rs_part_max_length_rs, + rs_part_max_length_rs / 2, + rs_part_max_length_rs + ); + + v3f vec; + // Jump downward sometimes + vec = v3f( + (float)(ps->next() % maxlen.X) - (float)maxlen.X / 2, + (float)(ps->next() % maxlen.Y) - (float)maxlen.Y / 2, + (float)(ps->next() % maxlen.Z) - (float)maxlen.Z / 2 + ); + + // Do not make caves that are above ground. + // It is only necessary to check the startpoint and endpoint. + v3s16 orpi(orp.X, orp.Y, orp.Z); + v3s16 veci(vec.X, vec.Y, vec.Z); + v3s16 p; + + p = orpi + veci + of + rs / 2; + if (p.Z >= node_min.Z && p.Z <= node_max.Z && + p.X >= node_min.X && p.X <= node_max.X) { + u32 index = (p.Z - node_min.Z) * mg->ystride + (p.X - node_min.X); + s16 h = mg->heightmap[index]; + if (h < p.Y) + return; + } else if (p.Y > water_level) { + return; // If it's not in our heightmap, use a simple heuristic + } + + p = orpi + of + rs / 2; + if (p.Z >= node_min.Z && p.Z <= node_max.Z && + p.X >= node_min.X && p.X <= node_max.X) { + u32 index = (p.Z - node_min.Z) * mg->ystride + (p.X - node_min.X); + s16 h = mg->heightmap[index]; + if (h < p.Y) + return; + } else if (p.Y > water_level) { + return; + } + + vec += main_direction; + + v3f rp = orp + vec; + if (rp.X < 0) + rp.X = 0; + else if (rp.X >= ar.X) + rp.X = ar.X - 1; + + if (rp.Y < route_y_min) + rp.Y = route_y_min; + else if (rp.Y >= route_y_max) + rp.Y = route_y_max - 1; + + if (rp.Z < 0) + rp.Z = 0; + else if (rp.Z >= ar.Z) + rp.Z = ar.Z - 1; + + vec = rp - orp; + + float veclen = vec.getLength(); + if (veclen < 0.05) + veclen = 1.0; + + // Every second section is rough + bool randomize_xz = (ps->range(1, 2) == 1); + + // Carve routes + for (float f = 0; f < 1.0; f += 1.0 / veclen) + carveRoute(vec, f, randomize_xz); + + orp = rp; +} + + +void CaveFractal::carveRoute(v3f vec, float f, bool randomize_xz) +{ + MapNode airnode(CONTENT_AIR); + MapNode waternode(c_water_source); + MapNode lavanode(c_lava_source); + + v3s16 startp(orp.X, orp.Y, orp.Z); + startp += of; + + float nval = NoisePerlin3D(np_caveliquids, startp.X, + startp.Y, startp.Z, mg->seed); + MapNode liquidnode = (nval < 0.40 && node_max.Y < MGFRACTAL_LAVA_DEPTH) ? + lavanode : waternode; + + v3f fp = orp + vec * f; + fp.X += 0.1 * ps->range(-10, 10); + fp.Z += 0.1 * ps->range(-10, 10); + v3s16 cp(fp.X, fp.Y, fp.Z); + + s16 d0 = -rs/2; + s16 d1 = d0 + rs; + if (randomize_xz) { + d0 += ps->range(-1, 1); + d1 += ps->range(-1, 1); + } + + for (s16 z0 = d0; z0 <= d1; z0++) { + s16 si = rs / 2 - MYMAX(0, abs(z0) - rs / 7 - 1); + for (s16 x0 = -si - ps->range(0,1); x0 <= si - 1 + ps->range(0,1); x0++) { + s16 maxabsxz = MYMAX(abs(x0), abs(z0)); + + s16 si2 = rs / 2 - MYMAX(0, maxabsxz - rs / 7 - 1); + + for (s16 y0 = -si2; y0 <= si2; y0++) { + if (large_cave_is_flat) { + // Make large caves not so tall + if (rs > 7 && abs(y0) >= rs / 3) + continue; + } + + v3s16 p(cp.X + x0, cp.Y + y0, cp.Z + z0); + p += of; + + if (vm->m_area.contains(p) == false) + continue; + + u32 i = vm->m_area.index(p); + content_t c = vm->m_data[i].getContent(); + if (!ndef->get(c).is_ground_content) + continue; + + int full_ymin = node_min.Y - MAP_BLOCKSIZE; + int full_ymax = node_max.Y + MAP_BLOCKSIZE; + + if (flooded && full_ymin < water_level && + full_ymax > water_level) + vm->m_data[i] = (p.Y <= water_level) ? + waternode : airnode; + else if (flooded && full_ymax < water_level) + vm->m_data[i] = (p.Y < startp.Y - 4) ? + liquidnode : airnode; + else + vm->m_data[i] = airnode; + } + } + } +} diff --git a/src/cavegen.h b/src/cavegen.h index 972a1801..5c9795b5 100644 --- a/src/cavegen.h +++ b/src/cavegen.h @@ -21,10 +21,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #define CAVEGEN_HEADER #define VMANIP_FLAG_CAVE VOXELFLAG_CHECKED1 +#define MGV7_LAVA_DEPTH -256 +#define MGFRACTAL_LAVA_DEPTH -256 class MapgenV5; class MapgenV6; class MapgenV7; +class MapgenFractal; class CaveV5 { public: @@ -68,7 +71,7 @@ public: CaveV5(MapgenV5 *mg, PseudoRandom *ps); void makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height); void makeTunnel(bool dirswitch); - void carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine); + void carveRoute(v3f vec, float f, bool randomize_xz); }; class CaveV6 { @@ -112,7 +115,7 @@ public: CaveV6(MapgenV6 *mg, PseudoRandom *ps, PseudoRandom *ps2, bool large_cave); void makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height); void makeTunnel(bool dirswitch); - void carveRoute(v3f vec, float f, bool randomize_xz); + void carveRoute(v3f vec, float f, bool randomize_xz, bool tunnel_above_ground); }; class CaveV7 { @@ -157,7 +160,52 @@ public: CaveV7(MapgenV7 *mg, PseudoRandom *ps); void makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height); void makeTunnel(bool dirswitch); - void carveRoute(v3f vec, float f, bool randomize_xz, bool is_ravine); + void carveRoute(v3f vec, float f, bool randomize_xz); +}; + +class CaveFractal { +public: + MapgenFractal *mg; + MMVManip *vm; + INodeDefManager *ndef; + + NoiseParams *np_caveliquids; + + s16 min_tunnel_diameter; + s16 max_tunnel_diameter; + u16 tunnel_routepoints; + int dswitchint; + int part_max_length_rs; + + bool large_cave_is_flat; + bool flooded; + + s16 max_stone_y; + v3s16 node_min; + v3s16 node_max; + + v3f orp; // starting point, relative to caved space + v3s16 of; // absolute coordinates of caved space + v3s16 ar; // allowed route area + s16 rs; // tunnel radius size + v3f main_direction; + + s16 route_y_min; + s16 route_y_max; + + PseudoRandom *ps; + + content_t c_water_source; + content_t c_lava_source; + content_t c_ice; + + int water_level; + + CaveFractal() {} + CaveFractal(MapgenFractal *mg, PseudoRandom *ps); + void makeCave(v3s16 nmin, v3s16 nmax, int max_stone_height); + void makeTunnel(bool dirswitch); + void carveRoute(v3f vec, float f, bool randomize_xz); }; #endif diff --git a/src/chat.cpp b/src/chat.cpp index 5c6aceee..6120ec9b 100644 --- a/src/chat.cpp +++ b/src/chat.cpp @@ -511,7 +511,7 @@ void ChatPrompt::nickCompletion(const std::list& names, bool backwa { std::wstring completion = narrow_to_wide(*i); if (prefix_start == 0) - completion += L":"; + completion += L": "; completions.push_back(completion); } } @@ -541,7 +541,7 @@ void ChatPrompt::nickCompletion(const std::list& names, bool backwa } } } - std::wstring replacement = completions[replacement_index] + L" "; + std::wstring replacement = completions[replacement_index]; if (word_end < m_line.size() && isspace(word_end)) ++word_end; diff --git a/src/client.cpp b/src/client.cpp index 077a2eb8..cb6a1154 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -21,7 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include -#include "jthread/jmutexautolock.h" +#include "threading/mutex_auto_lock.h" #include "util/auth.h" #include "util/directiontables.h" #include "util/pointedthing.h" @@ -34,6 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "porting.h" #include "mapblock_mesh.h" #include "mapblock.h" +#include "minimap.h" #include "settings.h" #include "profiler.h" #include "gettext.h" @@ -81,11 +82,11 @@ MeshUpdateQueue::MeshUpdateQueue() MeshUpdateQueue::~MeshUpdateQueue() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); for(std::vector::iterator i = m_queue.begin(); - i != m_queue.end(); i++) + i != m_queue.end(); ++i) { QueuedMeshUpdate *q = *i; delete q; @@ -97,11 +98,11 @@ MeshUpdateQueue::~MeshUpdateQueue() */ void MeshUpdateQueue::addBlock(v3s16 p, MeshMakeData *data, bool ack_block_to_server, bool urgent) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); assert(data); // pre-condition - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); if(urgent) m_urgents.insert(p); @@ -112,7 +113,7 @@ void MeshUpdateQueue::addBlock(v3s16 p, MeshMakeData *data, bool ack_block_to_se */ for(std::vector::iterator i = m_queue.begin(); - i != m_queue.end(); i++) + i != m_queue.end(); ++i) { QueuedMeshUpdate *q = *i; if(q->p == p) @@ -138,14 +139,14 @@ void MeshUpdateQueue::addBlock(v3s16 p, MeshMakeData *data, bool ack_block_to_se // Returned pointer must be deleted // Returns NULL if queue is empty -QueuedMeshUpdate * MeshUpdateQueue::pop() +QueuedMeshUpdate *MeshUpdateQueue::pop() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); bool must_be_urgent = !m_urgents.empty(); for(std::vector::iterator i = m_queue.begin(); - i != m_queue.end(); i++) + i != m_queue.end(); ++i) { QueuedMeshUpdate *q = *i; if(must_be_urgent && m_urgents.count(q->p) == 0) @@ -161,35 +162,21 @@ QueuedMeshUpdate * MeshUpdateQueue::pop() MeshUpdateThread */ -void * MeshUpdateThread::Thread() +void MeshUpdateThread::enqueueUpdate(v3s16 p, MeshMakeData *data, + bool ack_block_to_server, bool urgent) { - ThreadStarted(); + m_queue_in.addBlock(p, data, ack_block_to_server, urgent); + deferUpdate(); +} - log_register_thread("MeshUpdateThread"); - - DSTACK(__FUNCTION_NAME); - - BEGIN_DEBUG_EXCEPTION_HANDLER - - porting::setThreadName("MeshUpdateThread"); - - while(!StopRequested()) - { - QueuedMeshUpdate *q = m_queue_in.pop(); - if(q == NULL) - { - sleep_ms(3); - continue; - } +void MeshUpdateThread::doUpdate() +{ + QueuedMeshUpdate *q; + while ((q = m_queue_in.pop())) { ScopeProfiler sp(g_profiler, "Client: Mesh making"); MapBlockMesh *mesh_new = new MapBlockMesh(q->data, m_camera_offset); - if(mesh_new->getMesh()->getMeshBufferCount() == 0) - { - delete mesh_new; - mesh_new = NULL; - } MeshUpdateResult r; r.p = q->p; @@ -200,10 +187,6 @@ void * MeshUpdateThread::Thread() delete q; } - - END_DEBUG_EXCEPTION_HANDLER(errorstream) - - return NULL; } /* @@ -234,7 +217,7 @@ Client::Client( m_nodedef(nodedef), m_sound(sound), m_event(event), - m_mesh_update_thread(this), + m_mesh_update_thread(), m_env( new ClientMap(this, this, control, device->getSceneManager()->getRootSceneNode(), @@ -245,7 +228,9 @@ Client::Client( m_particle_manager(&m_env), m_con(PROTOCOL_ID, 512, CONNECTION_TIMEOUT, ipv6, this), m_device(device), + m_minimap_disabled_by_server(false), m_server_ser_ver(SER_FMT_VER_INVALID), + m_proto_ver(0), m_playeritem(0), m_inventory_updated(false), m_inventory_from_server(NULL), @@ -260,6 +245,7 @@ Client::Client( m_chosen_auth_mech(AUTH_MECHANISM_NONE), m_auth_data(NULL), m_access_denied(false), + m_access_denied_reconnect(false), m_itemdef_received(false), m_nodedef_received(false), m_media_downloader(new ClientMediaDownloader()), @@ -274,6 +260,7 @@ Client::Client( // Add local player m_env.addPlayer(new LocalPlayer(this, playername)); + m_mapper = new Mapper(device, this); m_cache_save_interval = g_settings->getU16("server_map_save_interval"); m_cache_smooth_lighting = g_settings->getBool("smooth_lighting"); @@ -283,7 +270,7 @@ Client::Client( void Client::Stop() { //request all client managed threads to stop - m_mesh_update_thread.Stop(); + m_mesh_update_thread.stop(); // Save local server map if (m_localdb) { infostream << "Local map saving ended." << std::endl; @@ -294,7 +281,7 @@ void Client::Stop() bool Client::isShutdown() { - if (!m_mesh_update_thread.IsRunning()) return true; + if (!m_mesh_update_thread.isRunning()) return true; return false; } @@ -303,9 +290,9 @@ Client::~Client() { m_con.Disconnect(); - m_mesh_update_thread.Stop(); - m_mesh_update_thread.Wait(); - while(!m_mesh_update_thread.m_queue_out.empty()) { + m_mesh_update_thread.stop(); + m_mesh_update_thread.wait(); + while (!m_mesh_update_thread.m_queue_out.empty()) { MeshUpdateResult r = m_mesh_update_thread.m_queue_out.pop_frontNoEx(); delete r.mesh; } @@ -314,27 +301,29 @@ Client::~Client() delete m_inventory_from_server; // Delete detached inventories - for(std::map::iterator + for (std::map::iterator i = m_detached_inventories.begin(); - i != m_detached_inventories.end(); i++){ + i != m_detached_inventories.end(); ++i) { delete i->second; } // cleanup 3d model meshes on client shutdown while (m_device->getSceneManager()->getMeshCache()->getMeshCount() != 0) { - scene::IAnimatedMesh * mesh = + scene::IAnimatedMesh *mesh = m_device->getSceneManager()->getMeshCache()->getMeshByIndex(0); if (mesh != NULL) m_device->getSceneManager()->getMeshCache()->removeMesh(mesh); } + + delete m_mapper; } void Client::connect(Address address, const std::string &address_name, bool is_local_server) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); initLocalMapSaving(address, address_name, is_local_server); @@ -344,7 +333,7 @@ void Client::connect(Address address, void Client::step(float dtime) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // Limit a bit if(dtime > 2.0) @@ -433,8 +422,9 @@ void Client::step(float dtime) ScopeProfiler sp(g_profiler, "Client: map timer and unload"); std::vector deleted_blocks; m_env.getMap().timerUpdate(map_timer_and_unload_dtime, - g_settings->getFloat("client_unload_unused_data_timeout"), - &deleted_blocks); + g_settings->getFloat("client_unload_unused_data_timeout"), + g_settings->getS32("client_mapblock_limit"), + &deleted_blocks); /* Send info to server @@ -537,27 +527,42 @@ void Client::step(float dtime) */ { int num_processed_meshes = 0; - while(!m_mesh_update_thread.m_queue_out.empty()) + while (!m_mesh_update_thread.m_queue_out.empty()) { num_processed_meshes++; + + MinimapMapblock *minimap_mapblock = NULL; + bool do_mapper_update = true; + MeshUpdateResult r = m_mesh_update_thread.m_queue_out.pop_frontNoEx(); MapBlock *block = m_env.getMap().getBlockNoCreateNoEx(r.p); - if(block) { + if (block) { // Delete the old mesh - if(block->mesh != NULL) - { - // TODO: Remove hardware buffers of meshbuffers of block->mesh + if (block->mesh != NULL) { delete block->mesh; block->mesh = NULL; } - // Replace with the new mesh - block->mesh = r.mesh; + if (r.mesh) { + minimap_mapblock = r.mesh->moveMinimapMapblock(); + if (minimap_mapblock == NULL) + do_mapper_update = false; + } + + if (r.mesh && r.mesh->getMesh()->getMeshBufferCount() == 0) { + delete r.mesh; + } else { + // Replace with the new mesh + block->mesh = r.mesh; + } } else { delete r.mesh; } - if(r.ack_block_to_server) { + if (do_mapper_update) + m_mapper->addBlock(r.p, minimap_mapblock); + + if (r.ack_block_to_server) { /* Acknowledge block [0] u8 count @@ -567,7 +572,7 @@ void Client::step(float dtime) } } - if(num_processed_meshes > 0) + if (num_processed_meshes > 0) g_profiler->graphAdd("num_processed_meshes", num_processed_meshes); } @@ -613,7 +618,7 @@ void Client::step(float dtime) { for(std::map::iterator i = m_sounds_to_objects.begin(); - i != m_sounds_to_objects.end(); i++) + i != m_sounds_to_objects.end(); ++i) { int client_id = i->first; u16 object_id = i->second; @@ -638,7 +643,7 @@ void Client::step(float dtime) i != m_sounds_server_to_client.end();) { s32 server_id = i->first; int client_id = i->second; - i++; + ++i; if(!m_sound->soundExists(client_id)) { m_sounds_server_to_client.erase(server_id); m_sounds_client_to_server.erase(client_id); @@ -742,14 +747,19 @@ bool Client::loadMedia(const std::string &data, const std::string &filename) // Virtual methods from con::PeerHandler void Client::peerAdded(con::Peer *peer) { - infostream<<"Client::peerAdded(): peer->id=" - <id<id=" + << peer->id << std::endl; } void Client::deletingPeer(con::Peer *peer, bool timeout) { - infostream<<"Client::deletingPeer(): " + infostream << "Client::deletingPeer(): " "Server Peer is getting deleted " - <<"(timeout="<getCommand(); u32 sender_peer_id = pkt->getPeerId(); @@ -880,6 +890,7 @@ void Client::ProcessData(NetworkPacket *pkt) if (command >= TOCLIENT_NUM_MSG_TYPES) { infostream << "Client: Ignoring unknown command " << command << std::endl; + return; } /* @@ -966,6 +977,7 @@ void Client::deleteAuthData() case AUTH_MECHANISM_NONE: break; } + m_chosen_auth_mech = AUTH_MECHANISM_NONE; } @@ -1047,12 +1059,13 @@ void Client::startAuth(AuthMechanism chosen_auth_mechanism) m_password.length(), NULL, NULL); char *bytes_A = 0; size_t len_A = 0; - srp_user_start_authentication((struct SRPUser *) m_auth_data, - NULL, NULL, 0, (unsigned char **) &bytes_A, &len_A); + SRP_Result res = srp_user_start_authentication( + (struct SRPUser *) m_auth_data, NULL, NULL, 0, + (unsigned char **) &bytes_A, &len_A); + FATAL_ERROR_IF(res != SRP_OK, "Creating local SRP user failed."); NetworkPacket resp_pkt(TOSERVER_SRP_BYTES_A, 0); resp_pkt << std::string(bytes_A, len_A) << based_on; - free(bytes_A); Send(&resp_pkt); break; } @@ -1095,7 +1108,7 @@ void Client::sendRemovedSounds(std::vector &soundList) pkt << (u16) (server_ids & 0xFFFF); for(std::vector::iterator i = soundList.begin(); - i != soundList.end(); i++) + i != soundList.end(); ++i) pkt << *i; Send(&pkt); @@ -1200,7 +1213,7 @@ void Client::sendChangePassword(const std::string &oldpassword, void Client::sendDamage(u8 damage) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOSERVER_DAMAGE, sizeof(u8)); pkt << damage; @@ -1209,7 +1222,7 @@ void Client::sendDamage(u8 damage) void Client::sendBreath(u16 breath) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOSERVER_BREATH, sizeof(u16)); pkt << breath; @@ -1218,7 +1231,7 @@ void Client::sendBreath(u16 breath) void Client::sendRespawn() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOSERVER_RESPAWN, 0); Send(&pkt); @@ -1226,7 +1239,7 @@ void Client::sendRespawn() void Client::sendReady() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOSERVER_CLIENT_READY, 1 + 1 + 1 + 1 + 2 + sizeof(char) * strlen(g_version_hash)); @@ -1260,7 +1273,7 @@ void Client::sendPlayerPos() u16 our_peer_id; { - //JMutexAutoLock lock(m_con_mutex); //bulk comment-out + //MutexAutoLock lock(m_con_mutex); //bulk comment-out our_peer_id = m_con.GetPeerID(); } @@ -1592,7 +1605,7 @@ void Client::addUpdateMeshTask(v3s16 p, bool ack_to_server, bool urgent) } // Add task to queue - m_mesh_update_thread.m_queue_in.addBlock(p, data, ack_to_server, urgent); + m_mesh_update_thread.enqueueUpdate(p, data, ack_to_server, urgent); } void Client::addUpdateMeshTaskWithEdge(v3s16 blockpos, bool ack_to_server, bool urgent) @@ -1784,7 +1797,7 @@ void Client::afterContentReceived(IrrlichtDevice *device) // Start mesh update thread after setting up content definitions infostream<<"- Starting mesh update thread"< #include #include @@ -48,6 +48,8 @@ struct MapDrawControl; class MtEventManager; struct PointedThing; class Database; +class Mapper; +struct MinimapMapblock; struct QueuedMeshUpdate { @@ -87,14 +89,14 @@ public: u32 size() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); return m_queue.size(); } private: std::vector m_queue; std::set m_urgents; - JMutex m_mutex; + Mutex m_mutex; }; struct MeshUpdateResult @@ -111,22 +113,21 @@ struct MeshUpdateResult } }; -class MeshUpdateThread : public JThread +class MeshUpdateThread : public UpdateThread { -public: - - MeshUpdateThread(IGameDef *gamedef): - m_gamedef(gamedef) - { - } - - void * Thread(); - +private: MeshUpdateQueue m_queue_in; - MutexedQueue m_queue_out; +protected: + virtual void doUpdate(); - IGameDef *m_gamedef; +public: + + MeshUpdateThread() : UpdateThread("Mesh") {} + + void enqueueUpdate(v3s16 p, MeshMakeData *data, + bool ack_block_to_server, bool urgent); + MutexedQueue m_queue_out; v3s16 m_camera_offset; }; @@ -483,6 +484,8 @@ public: bool accessDenied() { return m_access_denied; } + bool reconnectRequested() { return m_access_denied_reconnect; } + std::string accessDeniedReason() { return m_access_denied_reason; } @@ -493,6 +496,9 @@ public: bool mediaReceived() { return m_media_downloader == NULL; } + u8 getProtoVersion() + { return m_proto_ver; } + float mediaReceiveProgress(); void afterContentReceived(IrrlichtDevice *device); @@ -501,6 +507,12 @@ public: float getCurRate(void); float getAvgRate(void); + Mapper* getMapper () + { return m_mapper; } + + bool isMinimapDisabledByServer() + { return m_minimap_disabled_by_server; } + // IGameDef interface virtual IItemDefManager* getItemDefManager(); virtual INodeDefManager* getNodeDefManager(); @@ -580,10 +592,18 @@ private: ParticleManager m_particle_manager; con::Connection m_con; IrrlichtDevice *m_device; + Mapper *m_mapper; + bool m_minimap_disabled_by_server; // Server serialization version u8 m_server_ser_ver; + // Used version of the protocol with server + // Values smaller than 25 only mean they are smaller than 25, + // and aren't accurate. We simply just don't know, because + // the server didn't send the version back then. + // If 0, server init hasn't been received yet. u8 m_proto_ver; + u16 m_playeritem; bool m_inventory_updated; Inventory *m_inventory_from_server; @@ -617,6 +637,7 @@ private: bool m_access_denied; + bool m_access_denied_reconnect; std::string m_access_denied_reason; std::queue m_client_event_queue; bool m_itemdef_received; @@ -661,6 +682,8 @@ private: // TODO: Add callback to update these when g_settings changes bool m_cache_smooth_lighting; bool m_cache_enable_shaders; + + DISABLE_CLASS_COPY(Client); }; #endif // !CLIENT_HEADER diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index 7f8dff63..15be0d91 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -98,7 +98,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) if (list_video_modes) return print_video_modes(); - if (!init_engine(game_params.log_level)) { + if (!init_engine()) { errorstream << "Could not initialize game engine." << std::endl; return false; } @@ -177,8 +177,9 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) ChatBackend chat_backend; // If an error occurs, this is set to something by menu(). - // It is then displayed before the menu shows on the next call to menu() + // It is then displayed before the menu shows on the next call to menu() std::string error_message; + bool reconnect_requested = false; bool first_loop = true; @@ -192,7 +193,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) { // Set the window caption const wchar_t *text = wgettext("Main Menu"); - device->setWindowCaption((narrow_to_wide("MultiCraft") + L" [" + text + L"]").c_str()); + device->setWindowCaption((utf8_to_wide(PROJECT_NAME_C) + L" [" + text + L"]").c_str()); delete[] text; #ifdef ANDROID @@ -210,7 +211,8 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) */ guiroot = guienv->addStaticText(L"", core::rect(0, 0, 10000, 10000)); - bool game_has_run = launch_game(error_message, game_params, cmd_args); + bool game_has_run = launch_game(error_message, reconnect_requested, + game_params, cmd_args); // If skip_main_menu, we only want to startup once if (skip_main_menu && !first_loop) @@ -246,6 +248,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) receiver->m_touchscreengui = new TouchScreenGUI(device, receiver); g_touchscreengui = receiver->m_touchscreengui; #endif + the_game( kill, random_input, @@ -258,6 +261,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) current_port, error_message, chat_backend, + &reconnect_requested, gamespec, simple_singleplayer_mode ); @@ -330,22 +334,24 @@ void ClientLauncher::init_args(GameParams &game_params, const Settings &cmd_args || cmd_args.getFlag("random-input"); } -bool ClientLauncher::init_engine(int log_level) +bool ClientLauncher::init_engine() { receiver = new MyEventReceiver(); - create_engine_device(log_level); + create_engine_device(); return device != NULL; } bool ClientLauncher::launch_game(std::string &error_message, - GameParams &game_params, const Settings &cmd_args) + bool reconnect_requested, GameParams &game_params, + const Settings &cmd_args) { // Initialize menu data MainMenuData menudata; - menudata.address = address; - menudata.name = playername; - menudata.port = itos(game_params.socket_port); - menudata.errormessage = error_message; + menudata.address = address; + menudata.name = playername; + menudata.port = itos(game_params.socket_port); + menudata.script_data.errormessage = error_message; + menudata.script_data.reconnect_requested = reconnect_requested; error_message.clear(); @@ -392,11 +398,11 @@ bool ClientLauncher::launch_game(std::string &error_message, } } - if (!menudata.errormessage.empty()) { + if (!menudata.script_data.errormessage.empty()) { /* The calling function will pass this back into this function upon the * next iteration (if any) causing it to be displayed by the GUI */ - error_message = menudata.errormessage; + error_message = menudata.script_data.errormessage; return false; } @@ -462,7 +468,7 @@ bool ClientLauncher::launch_game(std::string &error_message, if (game_params.game_spec.isValid() && game_params.game_spec.id != worldspec.gameid) { - errorstream << "WARNING: Overriding gamespec from \"" + warningstream << "Overriding gamespec from \"" << worldspec.gameid << "\" to \"" << game_params.game_spec.id << "\"" << std::endl; gamespec = game_params.game_spec; @@ -507,20 +513,8 @@ void ClientLauncher::main_menu(MainMenuData *menudata) smgr->clear(); /* leave scene manager in a clean state */ } -bool ClientLauncher::create_engine_device(int log_level) +bool ClientLauncher::create_engine_device() { - static const irr::ELOG_LEVEL irr_log_level[5] = { - ELL_NONE, - ELL_ERROR, - ELL_WARNING, - ELL_INFORMATION, -#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8) - ELL_INFORMATION -#else - ELL_DEBUG -#endif - }; - // Resolution selection bool fullscreen = g_settings->getBool("fullscreen"); u16 screenW = g_settings->getU16("screenW"); @@ -568,10 +562,6 @@ bool ClientLauncher::create_engine_device(int log_level) device = createDeviceEx(params); if (device) { - // Map our log level to irrlicht engine one. - ILogger* irr_logger = device->getLogger(); - irr_logger->setLogLevel(irr_log_level[log_level]); - porting::initIrrlicht(device); } @@ -658,14 +648,14 @@ void ClientLauncher::speed_tests() infostream << "Around 5000/ms should do well here." << std::endl; TimeTaker timer("Testing mutex speed"); - JMutex m; + Mutex m; u32 n = 0; u32 i = 0; do { n += 10000; for (; i < n; i++) { - m.Lock(); - m.Unlock(); + m.lock(); + m.unlock(); } } // Do at least 10ms diff --git a/src/client/clientlauncher.h b/src/client/clientlauncher.h index ae841d33..091920b4 100644 --- a/src/client/clientlauncher.h +++ b/src/client/clientlauncher.h @@ -4,7 +4,7 @@ Copyright (C) 2010-2013 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 3.0 of the License, or +the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -90,13 +90,13 @@ public: protected: void init_args(GameParams &game_params, const Settings &cmd_args); - bool init_engine(int log_level); + bool init_engine(); - bool launch_game(std::string &error_message, GameParams &game_params, - const Settings &cmd_args); + bool launch_game(std::string &error_message, bool reconnect_requested, + GameParams &game_params, const Settings &cmd_args); void main_menu(MainMenuData *menudata); - bool create_engine_device(int log_level); + bool create_engine_device(); void speed_tests(); bool print_video_modes(); @@ -126,4 +126,4 @@ protected: int current_port; }; -#endif +#endif \ No newline at end of file diff --git a/src/client/inputhandler.h b/src/client/inputhandler.h index 46ad6fb3..bf856f38 100644 --- a/src/client/inputhandler.h +++ b/src/client/inputhandler.h @@ -17,8 +17,8 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef __INPUT_HANDLER_H__ -#define __INPUT_HANDLER_H__ +#ifndef INPUT_HANDLER_H +#define INPUT_HANDLER_H #include "irrlichttypes_extrabloated.h" @@ -85,10 +85,17 @@ public: mouse_wheel += event.MouseInput.Wheel; } } - } - if (event.EventType == irr::EET_LOG_TEXT_EVENT) { - //dstream << std::string("Irrlicht log: ") + std::string(event.LogEvent.Text) - // << std::endl; + } else if (event.EventType == irr::EET_LOG_TEXT_EVENT) { + static const LogLevel irr_loglev_conv[] = { + LL_VERBOSE, // ELL_DEBUG + LL_INFO, // ELL_INFORMATION + LL_WARNING, // ELL_WARNING + LL_ERROR, // ELL_ERROR + LL_NONE, // ELL_NONE + }; + assert(event.LogEvent.Level < ARRLEN(irr_loglev_conv)); + g_logger.log(irr_loglev_conv[event.LogEvent.Level], + std::string("Irrlicht: ") + (const char*) event.LogEvent.Text); return true; } /* always return false in order to continue processing events */ @@ -425,4 +432,4 @@ private: bool rightreleased; }; -#endif +#endif \ No newline at end of file diff --git a/src/client/tile.cpp b/src/client/tile.cpp index 712e17a4..3d058034 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -35,6 +35,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/string.h" // for parseColorString() #include "imagefilters.h" #include "guiscalingfilter.h" +#include "nodedef.h" + #ifdef __ANDROID__ #include @@ -192,7 +194,7 @@ class SourceImageCache public: ~SourceImageCache() { for (std::map::iterator iter = m_images.begin(); - iter != m_images.end(); iter++) { + iter != m_images.end(); ++iter) { iter->second->drop(); } m_images.clear(); @@ -330,7 +332,7 @@ public: */ video::ITexture* getTexture(u32 id); - video::ITexture* getTexture(const std::string &name, u32 *id); + video::ITexture* getTexture(const std::string &name, u32 *id = NULL); /* Get a texture specifically intended for mesh @@ -382,6 +384,9 @@ public: video::IImage* generateImage(const std::string &name); video::ITexture* getNormalTexture(const std::string &name); + video::SColor getTextureAverageColor(const std::string &name); + video::ITexture *getShaderFlagsTexture(bool normamap_present); + private: // The id of the thread that is allowed to use irrlicht directly @@ -409,7 +414,7 @@ private: // Maps a texture name to an index in the former. std::map m_name_to_id; // The two former containers are behind this mutex - JMutex m_textureinfo_cache_mutex; + Mutex m_textureinfo_cache_mutex; // Queued texture fetches (to be processed by the main thread) RequestQueue m_get_texture_queue; @@ -434,7 +439,7 @@ TextureSource::TextureSource(IrrlichtDevice *device): { assert(m_device); // Pre-condition - m_main_thread = get_current_thread_id(); + m_main_thread = thr_get_current_thread_id(); // Add a NULL TextureInfo as the first index, named "" m_textureinfo_cache.push_back(TextureInfo("")); @@ -456,7 +461,7 @@ TextureSource::~TextureSource() for (std::vector::iterator iter = m_textureinfo_cache.begin(); - iter != m_textureinfo_cache.end(); iter++) + iter != m_textureinfo_cache.end(); ++iter) { //cleanup texture if (iter->texture) @@ -466,7 +471,7 @@ TextureSource::~TextureSource() for (std::vector::iterator iter = m_texture_trash.begin(); iter != m_texture_trash.end(); - iter++) { + ++iter) { video::ITexture *t = *iter; //cleanup trashed texture @@ -485,7 +490,7 @@ u32 TextureSource::getTextureId(const std::string &name) /* See if texture already exists */ - JMutexAutoLock lock(m_textureinfo_cache_mutex); + MutexAutoLock lock(m_textureinfo_cache_mutex); std::map::iterator n; n = m_name_to_id.find(name); if (n != m_name_to_id.end()) @@ -497,7 +502,7 @@ u32 TextureSource::getTextureId(const std::string &name) /* Get texture */ - if (get_current_thread_id() == m_main_thread) + if (thr_is_current_thread(m_main_thread)) { return generateTexture(name); } @@ -588,7 +593,7 @@ u32 TextureSource::generateTexture(const std::string &name) /* See if texture already exists */ - JMutexAutoLock lock(m_textureinfo_cache_mutex); + MutexAutoLock lock(m_textureinfo_cache_mutex); std::map::iterator n; n = m_name_to_id.find(name); if (n != m_name_to_id.end()) { @@ -599,7 +604,7 @@ u32 TextureSource::generateTexture(const std::string &name) /* Calling only allowed from main thread */ - if (get_current_thread_id() != m_main_thread) { + if (!thr_is_current_thread(m_main_thread)) { errorstream<<"TextureSource::generateTexture() " "called not from main thread"<= m_textureinfo_cache.size()) { @@ -653,7 +658,7 @@ std::string TextureSource::getTextureName(u32 id) video::ITexture* TextureSource::getTexture(u32 id) { - JMutexAutoLock lock(m_textureinfo_cache_mutex); + MutexAutoLock lock(m_textureinfo_cache_mutex); if (id >= m_textureinfo_cache.size()) return NULL; @@ -699,7 +704,7 @@ void TextureSource::insertSourceImage(const std::string &name, video::IImage *im { //infostream<<"TextureSource::insertSourceImage(): name="<getVideoDriver()); m_source_image_existence.set(name, true); @@ -707,7 +712,7 @@ void TextureSource::insertSourceImage(const std::string &name, video::IImage *im void TextureSource::rebuildImagesAndTextures() { - JMutexAutoLock lock(m_textureinfo_cache_mutex); + MutexAutoLock lock(m_textureinfo_cache_mutex); video::IVideoDriver* driver = m_device->getVideoDriver(); sanity_check(driver); @@ -1005,7 +1010,7 @@ video::IImage* TextureSource::generateImage(const std::string &name) std::string last_part_of_name = name.substr(last_separator_pos + 1); - /* + /* If this name is enclosed in parentheses, generate it and blit it onto the base image */ @@ -1203,21 +1208,22 @@ bool TextureSource::generateImagePart(std::string part_of_name, s32 frame_count = stoi(sf.next(":")); s32 progression = stoi(sf.next(":")); - /* - Load crack image. + if (progression >= 0) { + /* + Load crack image. - It is an image with a number of cracking stages - horizontally tiled. - */ - video::IImage *img_crack = m_sourcecache.getOrLoad( + It is an image with a number of cracking stages + horizontally tiled. + */ + video::IImage *img_crack = m_sourcecache.getOrLoad( "crack_anylength.png", m_device); - if (img_crack && progression >= 0) - { - draw_crack(img_crack, baseimg, + if (img_crack) { + draw_crack(img_crack, baseimg, use_overlay, frame_count, progression, driver); - img_crack->drop(); + img_crack->drop(); + } } } /* @@ -1606,6 +1612,7 @@ bool TextureSource::generateImagePart(std::string part_of_name, if (img) { apply_mask(img, baseimg, v2s32(0, 0), v2s32(0, 0), img->getDimension()); + img->drop(); } else { errorstream << "generateImage(): Failed to load \"" << filename << "\"."; @@ -1990,9 +1997,8 @@ void imageTransform(u32 transform, video::IImage *src, video::IImage *dst) video::ITexture* TextureSource::getNormalTexture(const std::string &name) { - u32 id; if (isKnownSourceImage("override_normal.png")) - return getTexture("override_normal.png", &id); + return getTexture("override_normal.png"); std::string fname_base = name; std::string normal_ext = "_normal.png"; size_t pos = fname_base.find("."); @@ -2004,7 +2010,65 @@ video::ITexture* TextureSource::getNormalTexture(const std::string &name) fname_base.replace(i, 4, normal_ext); i += normal_ext.length(); } - return getTexture(fname_base, &id); + return getTexture(fname_base); } return NULL; } + +video::SColor TextureSource::getTextureAverageColor(const std::string &name) +{ + video::IVideoDriver *driver = m_device->getVideoDriver(); + video::SColor c(0, 0, 0, 0); + video::ITexture *texture = getTexture(name); + video::IImage *image = driver->createImage(texture, + core::position2d(0, 0), + texture->getOriginalSize()); + u32 total = 0; + u32 tR = 0; + u32 tG = 0; + u32 tB = 0; + core::dimension2d dim = image->getDimension(); + u16 step = 1; + if (dim.Width > 16) + step = dim.Width / 16; + for (u16 x = 0; x < dim.Width; x += step) { + for (u16 y = 0; y < dim.Width; y += step) { + c = image->getPixel(x,y); + if (c.getAlpha() > 0) { + total++; + tR += c.getRed(); + tG += c.getGreen(); + tB += c.getBlue(); + } + } + } + image->drop(); + if (total > 0) { + c.setRed(tR / total); + c.setGreen(tG / total); + c.setBlue(tB / total); + } + c.setAlpha(255); + return c; +} + + +video::ITexture *TextureSource::getShaderFlagsTexture(bool normalmap_present) +{ + std::string tname = "__shaderFlagsTexture"; + tname += normalmap_present ? "1" : "0"; + + if (isKnownSourceImage(tname)) { + return getTexture(tname); + } else { + video::IVideoDriver *driver = m_device->getVideoDriver(); + video::IImage *flags_image = driver->createImage( + video::ECF_A8R8G8B8, core::dimension2d(1, 1)); + sanity_check(flags_image != NULL); + video::SColor c(255, normalmap_present ? 255 : 0, 0, 0); + flags_image->setPixel(0, 0, c); + insertSourceImage(tname, flags_image); + flags_image->drop(); + return getTexture(tname); + } +} diff --git a/src/client/tile.h b/src/client/tile.h index d71c524c..ec324b0e 100644 --- a/src/client/tile.h +++ b/src/client/tile.h @@ -31,6 +31,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/numeric.h" class IGameDef; +struct TileSpec; +struct TileDef; /* tile.{h,cpp}: Texture handling stuff. @@ -110,6 +112,8 @@ public: virtual video::ITexture* generateTextureFromMesh( const TextureFromMeshParams ¶ms)=0; virtual video::ITexture* getNormalTexture(const std::string &name)=0; + virtual video::SColor getTextureAverageColor(const std::string &name)=0; + virtual video::ITexture *getShaderFlagsTexture(bool normalmap_present)=0; }; class IWritableTextureSource : public ITextureSource @@ -131,6 +135,8 @@ public: virtual void insertSourceImage(const std::string &name, video::IImage *img)=0; virtual void rebuildImagesAndTextures()=0; virtual video::ITexture* getNormalTexture(const std::string &name)=0; + virtual video::SColor getTextureAverageColor(const std::string &name)=0; + virtual video::ITexture *getShaderFlagsTexture(bool normalmap_present)=0; }; IWritableTextureSource* createTextureSource(IrrlichtDevice *device); @@ -160,6 +166,8 @@ enum MaterialType{ // defined by extra parameters #define MATERIAL_FLAG_ANIMATION_VERTICAL_FRAMES 0x08 #define MATERIAL_FLAG_HIGHLIGHTED 0x10 +#define MATERIAL_FLAG_TILEABLE_HORIZONTAL 0x20 +#define MATERIAL_FLAG_TILEABLE_VERTICAL 0x40 /* This fully defines the looks of a tile. @@ -170,12 +178,14 @@ struct FrameSpec FrameSpec(): texture_id(0), texture(NULL), - normal_texture(NULL) + normal_texture(NULL), + flags_texture(NULL) { } u32 texture_id; video::ITexture *texture; video::ITexture *normal_texture; + video::ITexture *flags_texture; }; struct TileSpec @@ -184,6 +194,7 @@ struct TileSpec texture_id(0), texture(NULL), normal_texture(NULL), + flags_texture(NULL), alpha(255), material_type(TILE_MATERIAL_BASIC), material_flags( @@ -239,17 +250,32 @@ struct TileSpec } material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING) ? true : false; + if (!(material_flags & MATERIAL_FLAG_TILEABLE_HORIZONTAL)) { + material.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE; + } + if (!(material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL)) { + material.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE; + } } void applyMaterialOptionsWithShaders(video::SMaterial &material) const { material.BackfaceCulling = (material_flags & MATERIAL_FLAG_BACKFACE_CULLING) ? true : false; + if (!(material_flags & MATERIAL_FLAG_TILEABLE_HORIZONTAL)) { + material.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE; + material.TextureLayer[1].TextureWrapU = video::ETC_CLAMP_TO_EDGE; + } + if (!(material_flags & MATERIAL_FLAG_TILEABLE_VERTICAL)) { + material.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE; + material.TextureLayer[1].TextureWrapV = video::ETC_CLAMP_TO_EDGE; + } } u32 texture_id; video::ITexture *texture; video::ITexture *normal_texture; + video::ITexture *flags_texture; // Vertex alpha (when MATERIAL_ALPHA_VERTEX is used) u8 alpha; @@ -264,5 +290,4 @@ struct TileSpec u8 rotation; }; - #endif diff --git a/src/clientiface.cpp b/src/clientiface.cpp index 94134bc7..86659b6a 100644 --- a/src/clientiface.cpp +++ b/src/clientiface.cpp @@ -38,10 +38,12 @@ const char *ClientInterface::statenames[] = { "Disconnecting", "Denied", "Created", - "InitSent", + "AwaitingInit2", + "HelloSent", "InitDone", "DefinitionsSent", - "Active" + "Active", + "SudoMode", }; @@ -65,7 +67,7 @@ void RemoteClient::GetNextBlocks ( float dtime, std::vector &dest) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // Increment timers @@ -209,25 +211,19 @@ void RemoteClient::GetNextBlocks ( max_simul_dynamic = max_simul_sends_setting; // Don't select too many blocks for sending - if(num_blocks_selected >= max_simul_dynamic) - { + if (num_blocks_selected >= max_simul_dynamic) { //queue_is_full = true; goto queue_full_break; } // Don't send blocks that are currently being transferred - if(m_blocks_sending.find(p) != m_blocks_sending.end()) + if (m_blocks_sending.find(p) != m_blocks_sending.end()) continue; /* Do not go over-limit */ - if(p.X < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.X > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Y < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Y > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Z < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Z > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE) + if (blockpos_over_limit(p)) continue; // If this is true, inexistent block will be made from scratch @@ -239,7 +235,7 @@ void RemoteClient::GetNextBlocks ( generate = false;*/ // Limit the send area vertically to 1/2 - if(abs(p.Y - center.Y) > full_d_max / 2) + if (abs(p.Y - center.Y) > full_d_max / 2) continue; } @@ -599,7 +595,7 @@ ClientInterface::~ClientInterface() Delete clients */ { - JMutexAutoLock clientslock(m_clients_mutex); + MutexAutoLock clientslock(m_clients_mutex); for(std::map::iterator i = m_clients.begin(); @@ -615,7 +611,7 @@ ClientInterface::~ClientInterface() std::vector ClientInterface::getClientIDs(ClientState min_state) { std::vector reply; - JMutexAutoLock clientslock(m_clients_mutex); + MutexAutoLock clientslock(m_clients_mutex); for(std::map::iterator i = m_clients.begin(); @@ -666,7 +662,7 @@ void ClientInterface::UpdatePlayerList() infostream << "* " << player->getName() << "\t"; { - JMutexAutoLock clientslock(m_clients_mutex); + MutexAutoLock clientslock(m_clients_mutex); RemoteClient* client = lockedGetClientNoEx(*i); if(client != NULL) client->PrintInfo(infostream); @@ -686,7 +682,7 @@ void ClientInterface::send(u16 peer_id, u8 channelnum, void ClientInterface::sendToAll(u16 channelnum, NetworkPacket* pkt, bool reliable) { - JMutexAutoLock clientslock(m_clients_mutex); + MutexAutoLock clientslock(m_clients_mutex); for(std::map::iterator i = m_clients.begin(); i != m_clients.end(); ++i) { @@ -700,7 +696,7 @@ void ClientInterface::sendToAll(u16 channelnum, RemoteClient* ClientInterface::getClientNoEx(u16 peer_id, ClientState state_min) { - JMutexAutoLock clientslock(m_clients_mutex); + MutexAutoLock clientslock(m_clients_mutex); std::map::iterator n; n = m_clients.find(peer_id); // The client may not exist; clients are immediately removed if their @@ -731,7 +727,7 @@ RemoteClient* ClientInterface::lockedGetClientNoEx(u16 peer_id, ClientState stat ClientState ClientInterface::getClientState(u16 peer_id) { - JMutexAutoLock clientslock(m_clients_mutex); + MutexAutoLock clientslock(m_clients_mutex); std::map::iterator n; n = m_clients.find(peer_id); // The client may not exist; clients are immediately removed if their @@ -744,7 +740,7 @@ ClientState ClientInterface::getClientState(u16 peer_id) void ClientInterface::setPlayerName(u16 peer_id,std::string name) { - JMutexAutoLock clientslock(m_clients_mutex); + MutexAutoLock clientslock(m_clients_mutex); std::map::iterator n; n = m_clients.find(peer_id); // The client may not exist; clients are immediately removed if their @@ -755,7 +751,7 @@ void ClientInterface::setPlayerName(u16 peer_id,std::string name) void ClientInterface::DeleteClient(u16 peer_id) { - JMutexAutoLock conlock(m_clients_mutex); + MutexAutoLock conlock(m_clients_mutex); // Error check std::map::iterator n; @@ -790,7 +786,7 @@ void ClientInterface::DeleteClient(u16 peer_id) void ClientInterface::CreateClient(u16 peer_id) { - JMutexAutoLock conlock(m_clients_mutex); + MutexAutoLock conlock(m_clients_mutex); // Error check std::map::iterator n; @@ -807,7 +803,7 @@ void ClientInterface::CreateClient(u16 peer_id) void ClientInterface::event(u16 peer_id, ClientStateEvent event) { { - JMutexAutoLock clientlock(m_clients_mutex); + MutexAutoLock clientlock(m_clients_mutex); // Error check std::map::iterator n; @@ -829,7 +825,7 @@ void ClientInterface::event(u16 peer_id, ClientStateEvent event) u16 ClientInterface::getProtocolVersion(u16 peer_id) { - JMutexAutoLock conlock(m_clients_mutex); + MutexAutoLock conlock(m_clients_mutex); // Error check std::map::iterator n; @@ -844,7 +840,7 @@ u16 ClientInterface::getProtocolVersion(u16 peer_id) void ClientInterface::setClientVersion(u16 peer_id, u8 major, u8 minor, u8 patch, std::string full) { - JMutexAutoLock conlock(m_clients_mutex); + MutexAutoLock conlock(m_clients_mutex); // Error check std::map::iterator n; diff --git a/src/clientiface.h b/src/clientiface.h index dc75572b..9c690fa4 100644 --- a/src/clientiface.h +++ b/src/clientiface.h @@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "constants.h" #include "serialization.h" // for SER_FMT_VER_INVALID -#include "jthread/jmutex.h" +#include "threading/mutex.h" #include "network/networkpacket.h" #include @@ -167,6 +167,9 @@ namespace con { #define CI_ARRAYSIZE(a) (sizeof(a) / sizeof((a)[0])) +// Also make sure to update the ClientInterface::statenames +// array when modifying these enums + enum ClientState { CS_Invalid, @@ -232,6 +235,7 @@ public: /* Authentication information */ std::string enc_pwd; + bool create_player_on_auth_success; AuthMechanism chosen_mech; void * auth_data; u32 allowed_auth_mechs; @@ -246,6 +250,7 @@ public: peer_id(PEER_ID_INEXISTENT), serialization_version(SER_FMT_VER_INVALID), net_proto_version(0), + create_player_on_auth_success(false), chosen_mech(AUTH_MECHANISM_NONE), auth_data(NULL), m_time_from_building(9999), @@ -485,10 +490,8 @@ public: protected: //TODO find way to avoid this functions - void Lock() - { m_clients_mutex.Lock(); } - void Unlock() - { m_clients_mutex.Unlock(); } + void lock() { m_clients_mutex.lock(); } + void unlock() { m_clients_mutex.unlock(); } std::map& getClientList() { return m_clients; } @@ -499,14 +502,14 @@ private: // Connection con::Connection* m_con; - JMutex m_clients_mutex; + Mutex m_clients_mutex; // Connected clients (behind the con mutex) std::map m_clients; std::vector m_clients_names; //for announcing masterserver // Environment ServerEnvironment *m_env; - JMutex m_env_mutex; + Mutex m_env_mutex; float m_print_info_timer; diff --git a/src/clientmap.cpp b/src/clientmap.cpp index 9764c7ae..d31be9e5 100644 --- a/src/clientmap.cpp +++ b/src/clientmap.cpp @@ -70,7 +70,7 @@ ClientMap::ClientMap( ClientMap::~ClientMap() { - /*JMutexAutoLock lock(mesh_mutex); + /*MutexAutoLock lock(mesh_mutex); if(mesh != NULL) { @@ -81,7 +81,7 @@ ClientMap::~ClientMap() MapSector * ClientMap::emergeSector(v2s16 p2d) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // Check that it doesn't exist already try{ return getSectorNoGenerate(p2d); @@ -94,7 +94,7 @@ MapSector * ClientMap::emergeSector(v2s16 p2d) ClientMapSector *sector = new ClientMapSector(this, p2d, m_gamedef); { - //JMutexAutoLock lock(m_sector_mutex); // Bulk comment-out + //MutexAutoLock lock(m_sector_mutex); // Bulk comment-out m_sectors[p2d] = sector; } @@ -157,12 +157,12 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver) } m_drawlist.clear(); - m_camera_mutex.Lock(); + m_camera_mutex.lock(); v3f camera_position = m_camera_position; v3f camera_direction = m_camera_direction; f32 camera_fov = m_camera_fov; //v3s16 camera_offset = m_camera_offset; - m_camera_mutex.Unlock(); + m_camera_mutex.unlock(); // Use a higher fov to accomodate faster camera movements. // Blocks are cropped better when they are drawn. @@ -228,7 +228,7 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver) u32 sector_blocks_drawn = 0; for(MapBlockVect::iterator i = sectorblocks.begin(); - i != sectorblocks.end(); i++) + i != sectorblocks.end(); ++i) { MapBlock *block = *i; @@ -263,7 +263,7 @@ void ClientMap::updateDrawList(video::IVideoDriver* driver) Ignore if mesh doesn't exist */ { - //JMutexAutoLock lock(block->mesh_mutex); + //MutexAutoLock lock(block->mesh_mutex); if(block->mesh == NULL){ blocks_in_range_without_mesh++; @@ -400,7 +400,7 @@ struct MeshBufListList void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); bool is_transparent_pass = pass == scene::ESNRP_TRANSPARENT; @@ -433,11 +433,11 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) int crack = m_client->getCrackLevel(); u32 daynight_ratio = m_client->getEnv().getDayNightRatio(); - m_camera_mutex.Lock(); + m_camera_mutex.lock(); v3f camera_position = m_camera_position; v3f camera_direction = m_camera_direction; f32 camera_fov = m_camera_fov; - m_camera_mutex.Unlock(); + m_camera_mutex.unlock(); /* Get all blocks and draw all visible ones @@ -504,7 +504,7 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) // Mesh animation { - //JMutexAutoLock lock(block->mesh_mutex); + //MutexAutoLock lock(block->mesh_mutex); MapBlockMesh *mapBlockMesh = block->mesh; assert(mapBlockMesh); // Pretty random but this should work somewhat nicely @@ -534,12 +534,12 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) Get the meshbuffers of the block */ { - //JMutexAutoLock lock(block->mesh_mutex); + //MutexAutoLock lock(block->mesh_mutex); MapBlockMesh *mapBlockMesh = block->mesh; assert(mapBlockMesh); - scene::SMesh *mesh = mapBlockMesh->getMesh(); + scene::IMesh *mesh = mapBlockMesh->getMesh(); assert(mesh); u32 c = mesh->getMeshBufferCount(); @@ -799,9 +799,9 @@ void ClientMap::renderPostFx(CameraMode cam_mode) // Sadly ISceneManager has no "post effects" render pass, in that case we // could just register for that and handle it in renderMap(). - m_camera_mutex.Lock(); + m_camera_mutex.lock(); v3f camera_position = m_camera_position; - m_camera_mutex.Unlock(); + m_camera_mutex.unlock(); MapNode n = getNodeNoEx(floatToInt(camera_position, BS)); diff --git a/src/clientmap.h b/src/clientmap.h index 5fda8b8e..b22a48b3 100644 --- a/src/clientmap.h +++ b/src/clientmap.h @@ -89,7 +89,7 @@ public: void updateCamera(v3f pos, v3f dir, f32 fov, v3s16 offset) { - JMutexAutoLock lock(m_camera_mutex); + MutexAutoLock lock(m_camera_mutex); m_camera_position = pos; m_camera_direction = dir; m_camera_fov = fov; @@ -149,7 +149,7 @@ private: v3f m_camera_direction; f32 m_camera_fov; v3s16 m_camera_offset; - JMutex m_camera_mutex; + Mutex m_camera_mutex; std::map m_drawlist; diff --git a/src/clientobject.cpp b/src/clientobject.cpp index a42998bd..43e68d32 100644 --- a/src/clientobject.cpp +++ b/src/clientobject.cpp @@ -47,7 +47,7 @@ ClientActiveObject* ClientActiveObject::create(ActiveObjectType type, n = m_types.find(type); if(n == m_types.end()) { // If factory is not found, just return. - dstream<<"WARNING: ClientActiveObject: No factory for type=" + warningstream<<"ClientActiveObject: No factory for type=" <<(int)type<* getSelectionBox(){return NULL;} virtual bool getCollisionBox(aabb3f *toset){return false;} diff --git a/src/clouds.cpp b/src/clouds.cpp index a3f325b4..def096ba 100644 --- a/src/clouds.cpp +++ b/src/clouds.cpp @@ -30,6 +30,11 @@ class Clouds; Clouds *g_menuclouds = NULL; irr::scene::ISceneManager *g_menucloudsmgr = NULL; +static void cloud_3d_setting_changed(const std::string &settingname, void *data) +{ + ((Clouds *)data)->readSettings(); +} + Clouds::Clouds( scene::ISceneNode* parent, scene::ISceneManager* mgr, @@ -52,8 +57,10 @@ Clouds::Clouds( //m_material.MaterialType = video::EMT_TRANSPARENT_VERTEX_ALPHA; m_material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; - m_cloud_y = BS * (cloudheight ? cloudheight : - g_settings->getS16("cloud_height")); + m_passed_cloud_y = cloudheight; + readSettings(); + g_settings->registerChangedCallback("enable_3d_clouds", + &cloud_3d_setting_changed, this); m_cloud_radius_i = g_settings->getU16("cloud_radius"); @@ -66,6 +73,8 @@ Clouds::Clouds( Clouds::~Clouds() { + g_settings->deregisterChangedCallback("enable_3d_clouds", + &cloud_3d_setting_changed, this); } void Clouds::OnRegisterSceneNode() @@ -351,3 +360,11 @@ void Clouds::update(v2f camera_p, video::SColorf color) //dstream<<"m_brightness="<getS16("cloud_height")); + m_cloud_radius_i = g_settings->getU16("cloud_radius"); + m_enable_3d = g_settings->getBool("enable_3d_clouds"); +} + diff --git a/src/clouds.h b/src/clouds.h index 75f5929d..e1668b05 100644 --- a/src/clouds.h +++ b/src/clouds.h @@ -83,9 +83,12 @@ public: BS * 1000000, m_cloud_y + BS - BS * camera_offset.Y, BS * 1000000); } + void readSettings(); + private: video::SMaterial m_material; core::aabbox3d m_box; + s16 m_passed_cloud_y; float m_cloud_y; u16 m_cloud_radius_i; bool m_enable_3d; diff --git a/src/cmake_config.h.in b/src/cmake_config.h.in index c3ca1e86..bda7a891 100644 --- a/src/cmake_config.h.in +++ b/src/cmake_config.h.in @@ -12,6 +12,7 @@ #define VERSION_STRING "@VERSION_STRING@" #define PRODUCT_VERSION_STRING "@VERSION_MAJOR@.@VERSION_MINOR@" #define STATIC_SHAREDIR "@SHAREDIR@" +#define STATIC_LOCALEDIR "@LOCALEDIR@" #define BUILD_TYPE "@CMAKE_BUILD_TYPE@" #cmakedefine01 RUN_IN_PLACE #cmakedefine01 USE_GETTEXT @@ -20,6 +21,7 @@ #cmakedefine01 USE_FREETYPE #cmakedefine01 USE_LEVELDB #cmakedefine01 USE_LUAJIT +#cmakedefine01 USE_SPATIAL #cmakedefine01 USE_SYSTEM_GMP #cmakedefine01 USE_REDIS #cmakedefine01 HAVE_ENDIAN_H diff --git a/src/collision.cpp b/src/collision.cpp index 48ab2a82..a8236970 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -176,7 +176,7 @@ bool wouldCollideWithCeiling( for(std::vector::const_iterator i = staticboxes.begin(); - i != staticboxes.end(); i++) + i != staticboxes.end(); ++i) { const aabb3f& staticbox = *i; if((movingbox.MaxEdge.Y - d <= staticbox.MinEdge.Y) && @@ -209,7 +209,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, Calculate new velocity */ if( dtime > 0.5 ) { - infostream<<"collisionMoveSimple: WARNING: maximum step interval exceeded, lost movement details!"<getNodeDefManager()->get(n); if(f.walkable == false) continue; @@ -265,7 +268,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, std::vector nodeboxes = n.getCollisionBoxes(gamedef->ndef()); for(std::vector::iterator i = nodeboxes.begin(); - i != nodeboxes.end(); i++) + i != nodeboxes.end(); ++i) { aabb3f box = *i; box.MinEdge += v3f(x, y, z)*BS; @@ -289,6 +292,12 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, is_object.push_back(false); } } + + // Do not move if world has not loaded yet, since custom node boxes + // are not available for collision detection. + if (!any_position_valid) + return result; + } // tt2 if(collideWithObjects) @@ -298,7 +307,6 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, /* add object boxes to cboxes */ - std::vector objects; #ifndef SERVER ClientEnvironment *c_env = dynamic_cast(env); @@ -320,7 +328,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, f32 distance = speed_f.getLength(); std::vector s_objects; s_env->getObjectsInsideRadius(s_objects, pos_f, distance * 1.5); - for (std::vector::iterator iter = s_objects.begin(); iter != s_objects.end(); iter++) { + for (std::vector::iterator iter = s_objects.begin(); iter != s_objects.end(); ++iter) { ServerActiveObject *current = s_env->getActiveObject(*iter); if ((self == 0) || (self != current)) { objects.push_back((ActiveObject*)current); @@ -371,16 +379,14 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, int loopcount = 0; - while(dtime > BS*1e-10) - { + while(dtime > BS * 1e-10) { //TimeTaker tt3("collisionMoveSimple dtime loop"); ScopeProfiler sp(g_profiler, "collisionMoveSimple dtime loop avg", SPT_AVG); // Avoid infinite loop loopcount++; - if(loopcount >= 100) - { - infostream<<"collisionMoveSimple: WARNING: Loop count exceeded, aborting to avoid infiniite loop"<= 100) { + warningstream << "collisionMoveSimple: Loop count exceeded, aborting to avoid infiniite loop" << std::endl; dtime = 0; break; } @@ -396,8 +402,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, /* Go through every nodebox, find nearest collision */ - for(u32 boxindex = 0; boxindex < cboxes.size(); boxindex++) - { + for (u32 boxindex = 0; boxindex < cboxes.size(); boxindex++) { // Ignore if already stepped up this nodebox. if(is_step_up[boxindex]) continue; @@ -407,7 +412,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, int collided = axisAlignedCollision( cboxes[boxindex], movingbox, speed_f, d, dtime_tmp); - if(collided == -1 || dtime_tmp >= nearest_dtime) + if (collided == -1 || dtime_tmp >= nearest_dtime) continue; nearest_dtime = dtime_tmp; @@ -415,18 +420,14 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, nearest_boxindex = boxindex; } - if(nearest_collided == -1) - { + if (nearest_collided == -1) { // No collision with any collision box. pos_f += speed_f * dtime; dtime = 0; // Set to 0 to avoid "infinite" loop due to small FP numbers - } - else - { + } else { // Otherwise, a collision occurred. const aabb3f& cbox = cboxes[nearest_boxindex]; - // Check for stairs. bool step_up = (nearest_collided != 1) && // must not be Y direction (movingbox.MinEdge.Y < cbox.MaxEdge.Y) && @@ -440,67 +441,56 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, float bounce = -(float)bouncy_values[nearest_boxindex] / 100.0; // Move to the point of collision and reduce dtime by nearest_dtime - if(nearest_dtime < 0) - { + if (nearest_dtime < 0) { // Handle negative nearest_dtime (can be caused by the d allowance) - if(!step_up) - { - if(nearest_collided == 0) + if (!step_up) { + if (nearest_collided == 0) pos_f.X += speed_f.X * nearest_dtime; - if(nearest_collided == 1) + if (nearest_collided == 1) pos_f.Y += speed_f.Y * nearest_dtime; - if(nearest_collided == 2) + if (nearest_collided == 2) pos_f.Z += speed_f.Z * nearest_dtime; } - } - else - { + } else { pos_f += speed_f * nearest_dtime; dtime -= nearest_dtime; } - + bool is_collision = true; - if(is_unloaded[nearest_boxindex]) + if (is_unloaded[nearest_boxindex]) is_collision = false; CollisionInfo info; - if (is_object[nearest_boxindex]) { + if (is_object[nearest_boxindex]) info.type = COLLISION_OBJECT; - } - else { + else info.type = COLLISION_NODE; - } + info.node_p = node_positions[nearest_boxindex]; info.bouncy = bouncy; info.old_speed = speed_f; // Set the speed component that caused the collision to zero - if(step_up) - { + if (step_up) { // Special case: Handle stairs is_step_up[nearest_boxindex] = true; is_collision = false; - } - else if(nearest_collided == 0) // X - { - if(fabs(speed_f.X) > BS*3) + } else if(nearest_collided == 0) { // X + if (fabs(speed_f.X) > BS * 3) speed_f.X *= bounce; else speed_f.X = 0; result.collides = true; result.collides_xz = true; } - else if(nearest_collided == 1) // Y - { - if(fabs(speed_f.Y) > BS*3) + else if(nearest_collided == 1) { // Y + if(fabs(speed_f.Y) > BS * 3) speed_f.Y *= bounce; else speed_f.Y = 0; result.collides = true; - } - else if(nearest_collided == 2) // Z - { - if(fabs(speed_f.Z) > BS*3) + } else if(nearest_collided == 2) { // Z + if (fabs(speed_f.Z) > BS * 3) speed_f.Z *= bounce; else speed_f.Z = 0; @@ -509,10 +499,10 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, } info.new_speed = speed_f; - if(info.new_speed.getDistanceFrom(info.old_speed) < 0.1*BS) + if (info.new_speed.getDistanceFrom(info.old_speed) < 0.1 * BS) is_collision = false; - if(is_collision){ + if (is_collision) { result.collisions.push_back(info); } } @@ -524,8 +514,7 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, aabb3f box = box_0; box.MinEdge += pos_f; box.MaxEdge += pos_f; - for(u32 boxindex = 0; boxindex < cboxes.size(); boxindex++) - { + for (u32 boxindex = 0; boxindex < cboxes.size(); boxindex++) { const aabb3f& cbox = cboxes[boxindex]; /* @@ -537,23 +526,21 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, Use 0.15*BS so that it is easier to get on a node. */ - if( - cbox.MaxEdge.X-d > box.MinEdge.X && - cbox.MinEdge.X+d < box.MaxEdge.X && - cbox.MaxEdge.Z-d > box.MinEdge.Z && - cbox.MinEdge.Z+d < box.MaxEdge.Z - ){ - if(is_step_up[boxindex]) - { + if (cbox.MaxEdge.X - d > box.MinEdge.X && cbox.MinEdge.X + d < box.MaxEdge.X && + cbox.MaxEdge.Z - d > box.MinEdge.Z && + cbox.MinEdge.Z + d < box.MaxEdge.Z) { + if (is_step_up[boxindex]) { pos_f.Y += (cbox.MaxEdge.Y - box.MinEdge.Y); box = box_0; box.MinEdge += pos_f; box.MaxEdge += pos_f; } - if(fabs(cbox.MaxEdge.Y-box.MinEdge.Y) < 0.15*BS) - { + if (fabs(cbox.MaxEdge.Y - box.MinEdge.Y) < 0.15 * BS) { result.touching_ground = true; - if(is_unloaded[boxindex]) + + if (is_object[boxindex]) + result.standing_on_object = true; + if (is_unloaded[boxindex]) result.standing_on_unloaded = true; } } @@ -561,76 +548,3 @@ collisionMoveResult collisionMoveSimple(Environment *env, IGameDef *gamedef, return result; } - -#if 0 -// This doesn't seem to work and isn't used -collisionMoveResult collisionMovePrecise(Map *map, IGameDef *gamedef, - f32 pos_max_d, const aabb3f &box_0, - f32 stepheight, f32 dtime, - v3f &pos_f, v3f &speed_f, v3f &accel_f) -{ - //TimeTaker tt("collisionMovePrecise"); - ScopeProfiler sp(g_profiler, "collisionMovePrecise avg", SPT_AVG); - - collisionMoveResult final_result; - - // If there is no speed, there are no collisions - if(speed_f.getLength() == 0) - return final_result; - - // Don't allow overly huge dtime - if(dtime > 2.0) - dtime = 2.0; - - f32 dtime_downcount = dtime; - - u32 loopcount = 0; - do - { - loopcount++; - - // Maximum time increment (for collision detection etc) - // time = distance / speed - f32 dtime_max_increment = 1.0; - if(speed_f.getLength() != 0) - dtime_max_increment = pos_max_d / speed_f.getLength(); - - // Maximum time increment is 10ms or lower - if(dtime_max_increment > 0.01) - dtime_max_increment = 0.01; - - f32 dtime_part; - if(dtime_downcount > dtime_max_increment) - { - dtime_part = dtime_max_increment; - dtime_downcount -= dtime_part; - } - else - { - dtime_part = dtime_downcount; - /* - Setting this to 0 (no -=dtime_part) disables an infinite loop - when dtime_part is so small that dtime_downcount -= dtime_part - does nothing - */ - dtime_downcount = 0; - } - - collisionMoveResult result = collisionMoveSimple(map, gamedef, - pos_max_d, box_0, stepheight, dtime_part, - pos_f, speed_f, accel_f); - - if(result.touching_ground) - final_result.touching_ground = true; - if(result.collides) - final_result.collides = true; - if(result.collides_xz) - final_result.collides_xz = true; - if(result.standing_on_unloaded) - final_result.standing_on_unloaded = true; - } - while(dtime_downcount > 0.001); - - return final_result; -} -#endif diff --git a/src/collision.h b/src/collision.h index 9de46b6f..76661f81 100644 --- a/src/collision.h +++ b/src/collision.h @@ -57,13 +57,15 @@ struct collisionMoveResult bool collides; bool collides_xz; bool standing_on_unloaded; + bool standing_on_object; std::vector collisions; collisionMoveResult(): touching_ground(false), collides(false), collides_xz(false), - standing_on_unloaded(false) + standing_on_unloaded(false), + standing_on_object(false) {} }; @@ -75,15 +77,6 @@ collisionMoveResult collisionMoveSimple(Environment *env,IGameDef *gamedef, v3f &accel_f,ActiveObject* self=0, bool collideWithObjects=true); -#if 0 -// This doesn't seem to work and isn't used -// Moves using as many iterations as needed -collisionMoveResult collisionMovePrecise(Map *map, IGameDef *gamedef, - f32 pos_max_d, const aabb3f &box_0, - f32 stepheight, f32 dtime, - v3f &pos_f, v3f &speed_f, v3f &accel_f); -#endif - // Helper function: // Checks for collision of a moving aabbox with a static aabbox // Returns -1 if no collision, 0 if X collision, 1 if Y collision, 2 if Z collision diff --git a/src/config.h b/src/config.h index 46032cc3..263d41ab 100644 --- a/src/config.h +++ b/src/config.h @@ -13,8 +13,8 @@ #if defined USE_CMAKE_CONFIG_H #include "cmake_config.h" #elif defined (__ANDROID__) || defined (ANDROID) - #define PROJECT_NAME "MultiCraft" - #define PROJECT_NAME_C "MultiCraft" + #define PROJECT_NAME "SnowCraft" + #define PROJECT_NAME_C "SnowCraft" #define STATIC_SHAREDIR "" #include "android_version.h" #ifdef NDEBUG diff --git a/src/constants.h b/src/constants.h index f2ce20c4..7546b1a4 100644 --- a/src/constants.h +++ b/src/constants.h @@ -64,7 +64,8 @@ with this program; if not, write to the Free Software Foundation, Inc., // The absolute working limit is (2^15 - viewing_range). // I really don't want to make every algorithm to check if it's going near // the limit or not, so this is lower. -#define MAP_GENERATION_LIMIT (31000) +// This is the maximum value the setting map_generation_limit can be +#define MAX_MAP_GENERATION_LIMIT (31000) // Size of node in floating-point units // The original idea behind this is to disallow plain casts between @@ -116,4 +117,3 @@ with this program; if not, write to the Free Software Foundation, Inc., #define DEFAULT_FONT_SIZE (10) #endif - diff --git a/src/content_cao.cpp b/src/content_cao.cpp index ae838f70..9f922239 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -465,7 +465,7 @@ void ItemCAO::updateTexture() } catch(SerializationError &e) { - infostream<<"WARNING: "<<__FUNCTION_NAME + warningstream< >()), m_attachment_bone(""), m_attachment_position(v3f(0,0,0)), @@ -727,6 +727,16 @@ scene::IBillboardSceneNode* GenericCAO::getSpriteSceneNode() return m_spritenode; } +void GenericCAO::setChildrenVisible(bool toset) +{ + for (std::vector::size_type i = 0; i < m_children.size(); i++) { + GenericCAO *obj = m_env->getGenericCAO(m_children[i]); + if (obj) { + obj->setVisible(toset); + } + } +} + void GenericCAO::setAttachments() { updateAttachments(); @@ -736,7 +746,7 @@ ClientActiveObject* GenericCAO::getParent() { ClientActiveObject *obj = NULL; - u16 attached_id = m_env->m_attachements[getId()]; + u16 attached_id = m_env->attachement_parent_ids[getId()]; if ((attached_id != 0) && (attached_id != getId())) { @@ -750,15 +760,14 @@ void GenericCAO::removeFromScene(bool permanent) // Should be true when removing the object permanently and false when refreshing (eg: updating visuals) if((m_env != NULL) && (permanent)) { - for(std::vector::iterator ci = m_children.begin(); - ci != m_children.end(); ci++) - { - if (m_env->m_attachements[*ci] == getId()) { - m_env->m_attachements[*ci] = 0; + for (std::vector::size_type i = 0; i < m_children.size(); i++) { + u16 ci = m_children[i]; + if (m_env->attachement_parent_ids[ci] == getId()) { + m_env->attachement_parent_ids[ci] = 0; } } - m_env->m_attachements[getId()] = 0; + m_env->attachement_parent_ids[getId()] = 0; LocalPlayer* player = m_env->getLocalPlayer(); if (this == player->parent) { @@ -925,10 +934,15 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc, u8 li = m_last_light; setMeshColor(m_animated_meshnode->getMesh(), video::SColor(255,li,li,li)); + bool backface_culling = m_prop.backface_culling; + if (m_is_player) + backface_culling = false; + m_animated_meshnode->setMaterialFlag(video::EMF_LIGHTING, false); m_animated_meshnode->setMaterialFlag(video::EMF_BILINEAR_FILTER, false); m_animated_meshnode->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF); m_animated_meshnode->setMaterialFlag(video::EMF_FOG_ENABLE, true); + m_animated_meshnode->setMaterialFlag(video::EMF_BACK_FACE_CULLING, backface_culling); } else errorstream<<"GenericCAO::addToScene(): Could not load mesh "<getGUIEnvironment(); - std::wstring wname = narrow_to_wide(m_name); + std::wstring wname = utf8_to_wide(m_name); m_textnode = smgr->addTextSceneNode(gui->getSkin()->getFont(), wname.c_str(), m_nametag_color, node); m_textnode->grab(); m_textnode->setPosition(v3f(0, BS*1.1, 0)); + + // Enforce hiding nametag, + // because if freetype is enabled, a grey + // shadow can remain. + m_textnode->setVisible(m_nametag_color.getAlpha() > 0); } updateNodePos(); @@ -975,20 +994,38 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc, } void GenericCAO::updateLight(u8 light_at_pos) +{ + // Don't update light of attached one + if (getParent() != NULL) { + return; + } + + updateLightNoCheck(light_at_pos); + + // Update light of all children + for (std::vector::size_type i = 0; i < m_children.size(); i++) { + ClientActiveObject *obj = m_env->getActiveObject(m_children[i]); + if (obj) { + obj->updateLightNoCheck(light_at_pos); + } + } +} + +void GenericCAO::updateLightNoCheck(u8 light_at_pos) { u8 li = decode_light(light_at_pos); - if(li != m_last_light) - { + if (li != m_last_light) { m_last_light = li; video::SColor color(255,li,li,li); - if(m_meshnode) + if (m_meshnode) { setMeshColor(m_meshnode->getMesh(), color); - if(m_animated_meshnode) + } else if (m_animated_meshnode) { setMeshColor(m_animated_meshnode->getMesh(), color); - if(m_wield_meshnode) + } else if (m_wield_meshnode) { m_wield_meshnode->setColor(color); - if(m_spritenode) + } else if (m_spritenode) { m_spritenode->setColor(color); + } } } @@ -1100,7 +1137,7 @@ void GenericCAO::step(float dtime, ClientEnvironment *env) for(std::vector::iterator ci = m_children.begin(); ci != m_children.end();) { - if (m_env->m_attachements[*ci] != getId()) { + if (m_env->attachement_parent_ids[*ci] != getId()) { ci = m_children.erase(ci); continue; } @@ -1117,11 +1154,9 @@ void GenericCAO::step(float dtime, ClientEnvironment *env) addToScene(m_smgr, m_gamedef->tsrc(), m_irr); // Attachments, part 2: Now that the parent has been refreshed, put its attachments back - for(std::vector::iterator ci = m_children.begin(); - ci != m_children.end(); ci++) - { + for (std::vector::size_type i = 0; i < m_children.size(); i++) { // Get the object of the child - ClientActiveObject *obj = m_env->getActiveObject(*ci); + ClientActiveObject *obj = m_env->getActiveObject(m_children[i]); if (obj) obj->setAttachments(); } @@ -1459,9 +1494,18 @@ void GenericCAO::updateAnimation() { if(m_animated_meshnode == NULL) return; - m_animated_meshnode->setFrameLoop(m_animation_range.X, m_animation_range.Y); - m_animated_meshnode->setAnimationSpeed(m_animation_speed); + + if (m_animated_meshnode->getStartFrame() != m_animation_range.X || + m_animated_meshnode->getEndFrame() != m_animation_range.Y) + m_animated_meshnode->setFrameLoop(m_animation_range.X, m_animation_range.Y); + if (m_animated_meshnode->getAnimationSpeed() != m_animation_speed) + m_animated_meshnode->setAnimationSpeed(m_animation_speed); m_animated_meshnode->setTransitionTime(m_animation_blend); +// Requires Irrlicht 1.8 or greater +#if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR >= 8) || IRRLICHT_VERSION_MAJOR > 1 + if (m_animated_meshnode->getLoopMode() != m_animation_loop) + m_animated_meshnode->setLoopMode(m_animation_loop); +#endif } void GenericCAO::updateBonePosition() @@ -1489,16 +1533,7 @@ void GenericCAO::updateBonePosition() void GenericCAO::updateAttachments() { - // localplayer itself can't be attached to localplayer - if (!m_is_local_player) - { - m_attached_to_local = getParent() != NULL && getParent()->isLocalPlayer(); - // Objects attached to the local player should always be hidden - m_is_visible = !m_attached_to_local; - } - - if(getParent() == NULL || m_attached_to_local) // Detach or don't attach - { + if (getParent() == NULL) { // Detach or don't attach scene::ISceneNode *node = getSceneNode(); if (node) { v3f old_position = node->getAbsolutePosition(); @@ -1636,6 +1671,8 @@ void GenericCAO::processMessage(const std::string &data) m_animation_range = v2s32((s32)range.X, (s32)range.Y); m_animation_speed = readF1000(is); m_animation_blend = readF1000(is); + // these are sent inverted so we get true when the server sends nothing + m_animation_loop = !readU8(is); updateAnimation(); } else { LocalPlayer *player = m_env->getLocalPlayer(); @@ -1644,6 +1681,8 @@ void GenericCAO::processMessage(const std::string &data) m_animation_range = v2s32((s32)range.X, (s32)range.Y); m_animation_speed = readF1000(is); m_animation_blend = readF1000(is); + // these are sent inverted so we get true when the server sends nothing + m_animation_loop = !readU8(is); } // update animation only if local animations present // and received animation is unknown (except idle animation) @@ -1667,14 +1706,31 @@ void GenericCAO::processMessage(const std::string &data) m_bone_position[bone] = core::vector2d(position, rotation); updateBonePosition(); - } - else if(cmd == GENERIC_CMD_SET_ATTACHMENT) { - m_env->m_attachements[getId()] = readS16(is); - m_children.push_back(m_env->m_attachements[getId()]); + } else if (cmd == GENERIC_CMD_ATTACH_TO) { + u16 parentID = readS16(is); + u16 oldparent = m_env->attachement_parent_ids[getId()]; + if (oldparent) { + m_children.erase(std::remove(m_children.begin(), m_children.end(), + getId()), m_children.end()); + } + m_env->attachement_parent_ids[getId()] = parentID; + GenericCAO *parentobj = m_env->getGenericCAO(parentID); + + if (parentobj) { + parentobj->m_children.push_back(getId()); + } + m_attachment_bone = deSerializeString(is); m_attachment_position = readV3F1000(is); m_attachment_rotation = readV3F1000(is); + // localplayer itself can't be attached to localplayer + if (!m_is_local_player) { + m_attached_to_local = getParent() != NULL && getParent()->isLocalPlayer(); + // Objects attached to the local player should be hidden by default + m_is_visible = !m_attached_to_local; + } + updateAttachments(); } else if(cmd == GENERIC_CMD_PUNCHED) { @@ -1774,7 +1830,7 @@ std::string GenericCAO::debugInfoText() os<<"GenericCAO hp="<first<<"="<second<<", "; } diff --git a/src/content_cao.h b/src/content_cao.h index 00e7485e..7012f145 100644 --- a/src/content_cao.h +++ b/src/content_cao.h @@ -60,7 +60,6 @@ private: std::string m_name; bool m_is_player; bool m_is_local_player; - int m_id; // Property-ish things ObjectProperties m_prop; // @@ -87,6 +86,7 @@ private: v2s32 m_animation_range; int m_animation_speed; int m_animation_blend; + bool m_animation_loop; std::map > m_bone_position; // stores position and rotation for each bone name std::string m_attachment_bone; v3f m_attachment_position; @@ -162,6 +162,8 @@ public: m_is_visible = toset; } + void setChildrenVisible(bool toset); + void setAttachments(); void removeFromScene(bool permanent); @@ -176,6 +178,8 @@ public: void updateLight(u8 light_at_pos); + void updateLightNoCheck(u8 light_at_pos); + v3s16 getLightPosition(); void updateNodePos(); diff --git a/src/content_mapblock.cpp b/src/content_mapblock.cpp index 70fe311d..0cdc285e 100644 --- a/src/content_mapblock.cpp +++ b/src/content_mapblock.cpp @@ -50,9 +50,9 @@ void makeCuboid(MeshCollector *collector, const aabb3f &box, v3f min = box.MinEdge; v3f max = box.MaxEdge; - - - + + + if(txc == NULL) { static const f32 txc_default[24] = { 0,0,1,1, @@ -350,7 +350,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, */ if(top_is_same_liquid) continue; - + video::S3DVertex vertices[4] = { video::S3DVertex(-BS/2,0,BS/2, 0,0,0, c, 0,1), @@ -383,7 +383,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, content_t c_source = nodedef->getId(f.liquid_alternative_source); if(ntop.getContent() == c_flowing || ntop.getContent() == c_source) top_is_same_liquid = true; - + u16 l = 0; // If this liquid emits light and doesn't contain light, draw // it at what it emits, for an increased effect @@ -399,7 +399,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, else l = getInteriorLight(n, 0, nodedef); video::SColor c = MapBlock_LightColor(f.alpha, l, f.light_source); - + u8 range = rangelim(nodedef->get(c_flowing).liquid_range, 1, 8); // Neighbor liquid levels (key = relative position) @@ -451,7 +451,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, n2.getContent() == c_flowing) flags |= neighborflag_top_is_same_liquid; } - + neighbor_levels[neighbor_dirs[i]] = level; neighbor_contents[neighbor_dirs[i]] = content; neighbor_flags[neighbor_dirs[i]] = flags; @@ -459,7 +459,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, // Corner heights (average between four liquids) f32 corner_levels[4]; - + v3s16 halfdirs[4] = { v3s16(0,0,0), v3s16(1,0,0), @@ -539,14 +539,14 @@ void mapblock_mesh_generate_special(MeshMakeData *data, content_t neighbor_content = neighbor_contents[dir]; const ContentFeatures &n_feat = nodedef->get(neighbor_content); - + // Don't draw face if neighbor is blocking the view if(n_feat.solidness == 2) continue; - + bool neighbor_is_same_liquid = (neighbor_content == c_source || neighbor_content == c_flowing); - + // Don't draw any faces if neighbor same is liquid and top is // same liquid if(neighbor_is_same_liquid == true @@ -558,7 +558,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, const TileSpec *current_tile = &tile_liquid; if(n_feat.solidness != 0 || n_feat.visual_solidness != 0) current_tile = &tile_liquid_bfculled; - + video::S3DVertex vertices[4] = { video::S3DVertex(-BS/2,0,BS/2, 0,0,0, c, 0,1), @@ -566,7 +566,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, video::S3DVertex(BS/2,0,BS/2, 0,0,0, c, 1,0), video::S3DVertex(-BS/2,0,BS/2, 0,0,0, c, 0,0), }; - + /* If our topside is liquid, set upper border of face at upper border of node @@ -584,7 +584,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, vertices[2].Pos.Y = corner_levels[side_corners[i][0]]; vertices[3].Pos.Y = corner_levels[side_corners[i][1]]; } - + /* If neighbor is liquid, lower border of face is corner liquid levels @@ -603,7 +603,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, vertices[0].Pos.Y = -0.5*BS; vertices[1].Pos.Y = -0.5*BS; } - + for(s32 j=0; j<4; j++) { if(dir == v3s16(0,0,1)) @@ -614,7 +614,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, vertices[j].Pos.rotateXZBy(90); if(dir == v3s16(1,0,-0)) vertices[j].Pos.rotateXZBy(-90); - + // Do this to not cause glitches when two liquids are // side-by-side /*if(neighbor_is_same_liquid == false){ @@ -629,11 +629,11 @@ void mapblock_mesh_generate_special(MeshMakeData *data, // Add to mesh collector collector.append(*current_tile, vertices, 4, indices, 6); } - + /* Generate top side, if appropriate */ - + if(top_is_same_liquid == false) { video::S3DVertex vertices[4] = @@ -643,7 +643,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, video::S3DVertex(BS/2,0,-BS/2, 0,0,0, c, 1,0), video::S3DVertex(-BS/2,0,-BS/2, 0,0,0, c, 0,0), }; - + // To get backface culling right, the vertices need to go // clockwise around the front of the face. And we happened to // calculate corner levels in exact reverse order. @@ -657,8 +657,8 @@ void mapblock_mesh_generate_special(MeshMakeData *data, vertices[i].Pos.Y += corner_levels[j]; vertices[i].Pos += intToFloat(p, BS); } - - // Default downwards-flowing texture animation goes from + + // Default downwards-flowing texture animation goes from // -Z towards +Z, thus the direction is +Z. // Rotate texture to make animation go in flow direction // Positive if liquid moves towards +Z @@ -721,7 +721,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, video::S3DVertex(BS/2,BS/2,BS/2, dir.X,dir.Y,dir.Z, c, 0,0), video::S3DVertex(-BS/2,BS/2,BS/2, dir.X,dir.Y,dir.Z, c, 1,0), }; - + // Rotations in the g_6dirs format if(j == 0) // Z+ for(u16 i=0; i<4; i++) @@ -770,7 +770,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, TileSpec tiles[6]; for (i = 0; i < 6; i++) tiles[i] = getNodeTile(n, p, dirs[i], data); - + TileSpec glass_tiles[6]; if (tiles[1].texture && tiles[2].texture && tiles[3].texture) { glass_tiles[0] = tiles[2]; @@ -781,21 +781,21 @@ void mapblock_mesh_generate_special(MeshMakeData *data, glass_tiles[5] = tiles[1]; } else { for (i = 0; i < 6; i++) - glass_tiles[i] = tiles[1]; + glass_tiles[i] = tiles[1]; } - + u8 param2 = n.getParam2(); bool H_merge = ! bool(param2 & 128); bool V_merge = ! bool(param2 & 64); param2 = param2 & 63; - + u16 l = getInteriorLight(n, 1, nodedef); video::SColor c = MapBlock_LightColor(255, l, f.light_source); v3f pos = intToFloat(p, BS); static const float a = BS / 2; static const float g = a - 0.003; static const float b = .876 * ( BS / 2 ); - + static const aabb3f frame_edges[12] = { aabb3f( b, b,-a, a, a, a), // y+ aabb3f(-a, b,-a,-b, a, a), // y+ @@ -818,16 +818,16 @@ void mapblock_mesh_generate_special(MeshMakeData *data, aabb3f(-g,-g, g, g, g, g), // z+ aabb3f(-g,-g,-g, g, g,-g) // z- }; - + // table of node visible faces, 0 = invisible int visible_faces[6] = {0,0,0,0,0,0}; - + // table of neighbours, 1 = same type, checked with g_26dirs int nb[18] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - + // g_26dirs to check when only horizontal merge is allowed int nb_H_dirs[8] = {0,2,3,5,10,11,12,13}; - + content_t current = n.getContent(); content_t n2c; MapNode n2; @@ -845,14 +845,14 @@ void mapblock_mesh_generate_special(MeshMakeData *data, n2 = data->m_vmanip.getNodeNoEx(n2p); n2c = n2.getContent(); if (n2c == current || n2c == CONTENT_IGNORE) - nb[4] = 1; + nb[4] = 1; } else if (H_merge && !V_merge) { for(i = 0; i < 8; i++) { n2p = blockpos_nodes + p + g_26dirs[nb_H_dirs[i]]; n2 = data->m_vmanip.getNodeNoEx(n2p); n2c = n2.getContent(); if (n2c == current || n2c == CONTENT_IGNORE) - nb[nb_H_dirs[i]] = 1; + nb[nb_H_dirs[i]] = 1; } } else if (H_merge && V_merge) { for(i = 0; i < 18; i++) { @@ -878,7 +878,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, visible_faces[i] = 1; } } - + if (!H_merge) { visible_faces[2] = 1; visible_faces[3] = 1; @@ -893,7 +893,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, visible_faces[i] = 1; } } - + static const u8 nb_triplet[12*3] = { 1,2, 7, 1,5, 6, 4,2,15, 4,5,14, 2,0,11, 2,3,13, 5,0,10, 5,3,12, @@ -1010,7 +1010,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, case NDT_TORCHLIKE: { v3s16 dir = n.getWallMountedDir(nodedef); - + u8 tileindex = 0; if(dir == v3s16(0,-1,0)){ tileindex = 0; // floor @@ -1070,7 +1070,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, u16 l = getInteriorLight(n, 0, nodedef); video::SColor c = MapBlock_LightColor(255, l, f.light_source); - + float d = (float)BS/16; float s = BS/2*f.visual_scale; // Wall at X+ of node @@ -1113,7 +1113,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, u16 l = getInteriorLight(n, 1, nodedef); video::SColor c = MapBlock_LightColor(255, l, f.light_source); - + float s = BS / 2 * f.visual_scale; for (int j = 0; j < 2; j++) @@ -1125,16 +1125,16 @@ void mapblock_mesh_generate_special(MeshMakeData *data, video::S3DVertex( s,-BS/2 + s*2,0, 0,0,0, c, 1,0), video::S3DVertex(-s,-BS/2 + s*2,0, 0,0,0, c, 0,0), }; + float rotate_degree = 0; + if (f.param_type_2 == CPT2_DEGROTATE) + rotate_degree = n.param2 * 2; - if(j == 0) - { + if (j == 0) { for(u16 i = 0; i < 4; i++) - vertices[i].Pos.rotateXZBy(46 + n.param2 * 2); - } - else if(j == 1) - { + vertices[i].Pos.rotateXZBy(46 + rotate_degree); + } else if (j == 1) { for(u16 i = 0; i < 4; i++) - vertices[i].Pos.rotateXZBy(-44 + n.param2 * 2); + vertices[i].Pos.rotateXZBy(-44 + rotate_degree); } for (int i = 0; i < 4; i++) @@ -1157,7 +1157,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, u16 l = getInteriorLight(n, 1, nodedef); video::SColor c = MapBlock_LightColor(255, l, f.light_source); - float s = BS/2*f.visual_scale; + float s = BS / 2 * f.visual_scale; content_t current = n.getContent(); content_t n2c; @@ -1165,148 +1165,116 @@ void mapblock_mesh_generate_special(MeshMakeData *data, v3s16 n2p; static const v3s16 dirs[6] = { - v3s16( 0, 1, 0), - v3s16( 0,-1, 0), - v3s16( 1, 0, 0), - v3s16(-1, 0, 0), - v3s16( 0, 0, 1), - v3s16( 0, 0,-1) + v3s16( 0, 1, 0), + v3s16( 0, -1, 0), + v3s16( 1, 0, 0), + v3s16(-1, 0, 0), + v3s16( 0, 0, 1), + v3s16( 0, 0, -1) }; - int doDraw[6] = {0,0,0,0,0,0}; + int doDraw[6] = {0, 0, 0, 0, 0, 0}; bool drawAllFaces = true; - bool drawBottomFacesOnly = false; // Currently unused - // Check for adjacent nodes - for(int i = 0; i < 6; i++) - { + for (int i = 0; i < 6; i++) { n2p = blockpos_nodes + p + dirs[i]; n2 = data->m_vmanip.getNodeNoEx(n2p); n2c = n2.getContent(); if (n2c != CONTENT_IGNORE && n2c != CONTENT_AIR && n2c != current) { doDraw[i] = 1; - if(drawAllFaces) + if (drawAllFaces) drawAllFaces = false; } } - for(int j = 0; j < 6; j++) - { - int vOffset = 0; // Vertical offset of faces after rotation - int hOffset = 4; // Horizontal offset of faces to reach the edge + for (int j = 0; j < 6; j++) { - video::S3DVertex vertices[4] = - { - video::S3DVertex(-s,-BS/2, 0, 0,0,0, c, 0,1), - video::S3DVertex( s,-BS/2, 0, 0,0,0, c, 1,1), - video::S3DVertex( s,-BS/2 + s*2,0, 0,0,0, c, 1,0), - video::S3DVertex(-s,-BS/2 + s*2,0, 0,0,0, c, 0,0), + video::S3DVertex vertices[4] = { + video::S3DVertex(-s, -BS / 2, 0, 0, 0, 0, c, 0, 1), + video::S3DVertex( s, -BS / 2, 0, 0, 0, 0, c, 1, 1), + video::S3DVertex( s, -BS / 2 + s * 2, 0, 0, 0, 0, c, 1, 0), + video::S3DVertex(-s, -BS / 2 + s * 2, 0, 0, 0, 0, c, 0, 0), }; // Calculate which faces should be drawn, (top or sides) - if(j == 0 && (drawAllFaces || (doDraw[3] == 1 || doDraw[1] == 1))) - { - for(int i = 0; i < 4; i++) { - vertices[i].Pos.rotateXZBy(90 + n.param2 * 2); + if (j == 0 && (drawAllFaces || + (doDraw[3] == 1 || doDraw[1] == 1))) { + for (int i = 0; i < 4; i++) { + vertices[i].Pos.rotateXZBy(90); vertices[i].Pos.rotateXYBy(-10); - vertices[i].Pos.Y -= vOffset; - vertices[i].Pos.X -= hOffset; + vertices[i].Pos.X -= 4.0; } - } - else if(j == 1 && (drawAllFaces || (doDraw[5] == 1 || doDraw[1] == 1))) - { - for(int i = 0; i < 4; i++) { - vertices[i].Pos.rotateXZBy(180 + n.param2 * 2); + } else if (j == 1 && (drawAllFaces || + (doDraw[5] == 1 || doDraw[1] == 1))) { + for (int i = 0; i < 4; i++) { + vertices[i].Pos.rotateXZBy(180); vertices[i].Pos.rotateYZBy(10); - vertices[i].Pos.Y -= vOffset; - vertices[i].Pos.Z -= hOffset; + vertices[i].Pos.Z -= 4.0; } - } - else if(j == 2 && (drawAllFaces || (doDraw[2] == 1 || doDraw[1] == 1))) - { - for(int i = 0; i < 4; i++) { - vertices[i].Pos.rotateXZBy(270 + n.param2 * 2); + } else if (j == 2 && (drawAllFaces || + (doDraw[2] == 1 || doDraw[1] == 1))) { + for (int i = 0; i < 4; i++) { + vertices[i].Pos.rotateXZBy(270); vertices[i].Pos.rotateXYBy(10); - vertices[i].Pos.Y -= vOffset; - vertices[i].Pos.X += hOffset; + vertices[i].Pos.X += 4.0; } - } - else if(j == 3 && (drawAllFaces || (doDraw[4] == 1 || doDraw[1] == 1))) - { - for(int i = 0; i < 4; i++) { + } else if (j == 3 && (drawAllFaces || + (doDraw[4] == 1 || doDraw[1] == 1))) { + for (int i = 0; i < 4; i++) { vertices[i].Pos.rotateYZBy(-10); - vertices[i].Pos.Y -= vOffset; - vertices[i].Pos.Z += hOffset; + vertices[i].Pos.Z += 4.0; } - } - // Center cross-flames - else if(j == 4 && (drawAllFaces || doDraw[1] == 1)) - { - for(int i=0; i<4; i++) { - vertices[i].Pos.rotateXZBy(45 + n.param2 * 2); - vertices[i].Pos.Y -= vOffset; + } else if (j == 4 && (drawAllFaces || doDraw[1] == 1)) { + for (int i = 0; i < 4; i++) { + vertices[i].Pos.rotateXZBy(45); } - } - else if(j == 5 && (drawAllFaces || doDraw[1] == 1)) - { - for(int i=0; i<4; i++) { - vertices[i].Pos.rotateXZBy(-45 + n.param2 * 2); - vertices[i].Pos.Y -= vOffset; + } else if (j == 5 && (drawAllFaces || doDraw[1] == 1)) { + for (int i = 0; i < 4; i++) { + vertices[i].Pos.rotateXZBy(-45); } - } - - // Render flames on bottom - else if(j == 0 && (drawBottomFacesOnly || (doDraw[0] == 1 && doDraw[1] == 0))) - { - for(int i = 0; i < 4; i++) { + // Render flames on bottom of node above + } else if (j == 0 && doDraw[0] == 1 && doDraw[1] == 0) { + for (int i = 0; i < 4; i++) { vertices[i].Pos.rotateYZBy(70); - vertices[i].Pos.rotateXZBy(90 + n.param2 * 2); + vertices[i].Pos.rotateXZBy(90); vertices[i].Pos.Y += 4.84; - vertices[i].Pos.X -= hOffset+0.7; + vertices[i].Pos.X -= 4.7; } - } - else if(j == 1 && (drawBottomFacesOnly || (doDraw[0] == 1 && doDraw[1] == 0))) - { - for(int i = 0; i < 4; i++) { + } else if (j == 1 && doDraw[0] == 1 && doDraw[1] == 0) { + for (int i = 0; i < 4; i++) { vertices[i].Pos.rotateYZBy(70); - vertices[i].Pos.rotateXZBy(180 + n.param2 * 2); + vertices[i].Pos.rotateXZBy(180); vertices[i].Pos.Y += 4.84; - vertices[i].Pos.Z -= hOffset+0.7; + vertices[i].Pos.Z -= 4.7; } - } - else if(j == 2 && (drawBottomFacesOnly || (doDraw[0] == 1 && doDraw[1] == 0))) - { - for(int i = 0; i < 4; i++) { + } else if (j == 2 && doDraw[0] == 1 && doDraw[1] == 0) { + for (int i = 0; i < 4; i++) { vertices[i].Pos.rotateYZBy(70); - vertices[i].Pos.rotateXZBy(270 + n.param2 * 2); + vertices[i].Pos.rotateXZBy(270); vertices[i].Pos.Y += 4.84; - vertices[i].Pos.X += hOffset+0.7; + vertices[i].Pos.X += 4.7; } - } - else if(j == 3 && (drawBottomFacesOnly || (doDraw[0] == 1 && doDraw[1] == 0))) - { - for(int i = 0; i < 4; i++) { + } else if (j == 3 && doDraw[0] == 1 && doDraw[1] == 0) { + for (int i = 0; i < 4; i++) { vertices[i].Pos.rotateYZBy(70); vertices[i].Pos.Y += 4.84; - vertices[i].Pos.Z += hOffset+0.7; + vertices[i].Pos.Z += 4.7; } - } - else { + } else { // Skip faces that aren't adjacent to a node continue; } - for(int i=0; i<4; i++) - { + for (int i = 0; i < 4; i++) { vertices[i].Pos *= f.visual_scale; vertices[i].Pos += intToFloat(p, BS); } - u16 indices[] = {0,1,2,2,3,0}; + u16 indices[] = {0, 1, 2, 2, 3, 0}; // Add to mesh collector collector.append(tile, vertices, 4, indices, 6); } @@ -1539,7 +1507,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, v3s16(0, 0, -1) }; TileSpec tiles[6]; - + u16 l = getInteriorLight(n, 1, nodedef); video::SColor c = MapBlock_LightColor(255, l, f.light_source); @@ -1548,7 +1516,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, std::vector boxes = n.getNodeBoxes(nodedef); for(std::vector::iterator i = boxes.begin(); - i != boxes.end(); i++) + i != boxes.end(); ++i) { for(int j = 0; j < 6; j++) { @@ -1558,7 +1526,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, aabb3f box = *i; box.MinEdge += pos; box.MaxEdge += pos; - + f32 temp; if (box.MinEdge.X > box.MaxEdge.X) { @@ -1647,7 +1615,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data, break;} } } - + /* Caused by incorrect alpha blending, selection mesh needs to be created as last element to ensure it gets blended correct over nodes with alpha channel @@ -1675,21 +1643,21 @@ void mapblock_mesh_generate_special(MeshMakeData *data, u16 l = 0; u16 l1 = 0; for (u8 i = 0; i < 7; i++) { - MapNode n1 = data->m_vmanip.getNodeNoEx(blockpos_nodes + p + dirs[i]); + MapNode n1 = data->m_vmanip.getNodeNoEx(blockpos_nodes + p + dirs[i]); l1 = getInteriorLight(n1, -4, nodedef); - if (l1 > l) + if (l1 > l) l = l1; } video::SColor c = MapBlock_LightColor(255, l, 0); data->m_highlight_mesh_color = c; std::vector boxes = n.getSelectionBoxes(nodedef); - TileSpec h_tile; + TileSpec h_tile; h_tile.material_flags |= MATERIAL_FLAG_HIGHLIGHTED; h_tile.texture = tsrc->getTextureForMesh("halo.png",&h_tile.texture_id); v3f pos = intToFloat(p, BS); f32 d = 0.05 * BS; for (std::vector::iterator i = boxes.begin(); - i != boxes.end(); i++) { + i != boxes.end(); ++i) { aabb3f box = *i; box.MinEdge += v3f(-d, -d, -d) + pos; box.MaxEdge += v3f(d, d, d) + pos; diff --git a/src/content_mapnode.cpp b/src/content_mapnode.cpp index 73050c5d..ba8b9550 100644 --- a/src/content_mapnode.cpp +++ b/src/content_mapnode.cpp @@ -166,83 +166,3 @@ void content_mapnode_get_name_id_mapping(NameIdMapping *nimap) nimap->set(CONTENT_IGNORE, "ignore"); nimap->set(CONTENT_AIR, "air"); } - -class NewNameGetter -{ -public: - NewNameGetter() - { - old_to_new["CONTENT_STONE"] = "default:stone"; - old_to_new["CONTENT_WATER"] = "default:water_flowing"; - old_to_new["CONTENT_TORCH"] = "default:torch"; - old_to_new["CONTENT_WATERSOURCE"] = "default:water_source"; - old_to_new["CONTENT_SIGN_WALL"] = "default:sign_wall"; - old_to_new["CONTENT_CHEST"] = "default:chest"; - old_to_new["CONTENT_FURNACE"] = "default:furnace"; - old_to_new["CONTENT_LOCKABLE_CHEST"] = "default:locked_chest"; - old_to_new["CONTENT_FENCE"] = "default:wooden_fence"; - old_to_new["CONTENT_RAIL"] = "default:rail"; - old_to_new["CONTENT_LADDER"] = "default:ladder"; - old_to_new["CONTENT_LAVA"] = "default:lava_flowing"; - old_to_new["CONTENT_LAVASOURCE"] = "default:lava_source"; - old_to_new["CONTENT_GRASS"] = "default:dirt_with_grass"; - old_to_new["CONTENT_TREE"] = "default:tree"; - old_to_new["CONTENT_LEAVES"] = "default:leaves"; - old_to_new["CONTENT_GRASS_FOOTSTEPS"] = "default:dirt_with_grass_footsteps"; - old_to_new["CONTENT_MESE"] = "default:mese"; - old_to_new["CONTENT_MUD"] = "default:dirt"; - old_to_new["CONTENT_CLOUD"] = "default:cloud"; - old_to_new["CONTENT_COALSTONE"] = "default:coalstone"; - old_to_new["CONTENT_WOOD"] = "default:wood"; - old_to_new["CONTENT_SAND"] = "default:sand"; - old_to_new["CONTENT_COBBLE"] = "default:cobble"; - old_to_new["CONTENT_STEEL"] = "default:steel"; - old_to_new["CONTENT_GLASS"] = "default:glass"; - old_to_new["CONTENT_MOSSYCOBBLE"] = "default:mossycobble"; - old_to_new["CONTENT_GRAVEL"] = "default:gravel"; - old_to_new["CONTENT_SANDSTONE"] = "default:sandstone"; - old_to_new["CONTENT_CACTUS"] = "default:cactus"; - old_to_new["CONTENT_BRICK"] = "default:brick"; - old_to_new["CONTENT_CLAY"] = "default:clay"; - old_to_new["CONTENT_PAPYRUS"] = "default:papyrus"; - old_to_new["CONTENT_BOOKSHELF"] = "default:bookshelf"; - old_to_new["CONTENT_JUNGLETREE"] = "default:jungletree"; - old_to_new["CONTENT_JUNGLEGRASS"] = "default:junglegrass"; - old_to_new["CONTENT_NC"] = "default:nyancat"; - old_to_new["CONTENT_NC_RB"] = "default:nyancat_rainbow"; - old_to_new["CONTENT_APPLE"] = "default:apple"; - old_to_new["CONTENT_SAPLING"] = "default:sapling"; - // Just in case - old_to_new["CONTENT_IGNORE"] = "ignore"; - old_to_new["CONTENT_AIR"] = "air"; - } - std::string get(const std::string &old) - { - StringMap::const_iterator it = old_to_new.find(old); - if (it == old_to_new.end()) - return ""; - return it->second; - } -private: - StringMap old_to_new; -}; - -NewNameGetter newnamegetter; - -std::string content_mapnode_get_new_name(const std::string &oldname) -{ - return newnamegetter.get(oldname); -} - -content_t legacy_get_id(const std::string &oldname, INodeDefManager *ndef) -{ - std::string newname = content_mapnode_get_new_name(oldname); - if(newname == "") - return CONTENT_IGNORE; - content_t id; - bool found = ndef->getId(newname, id); - if(!found) - return CONTENT_IGNORE; - return id; -} - diff --git a/src/content_mapnode.h b/src/content_mapnode.h index ce4ef484..f0dece91 100644 --- a/src/content_mapnode.h +++ b/src/content_mapnode.h @@ -34,11 +34,4 @@ MapNode mapnode_translate_to_internal(MapNode n_from, u8 version); class NameIdMapping; void content_mapnode_get_name_id_mapping(NameIdMapping *nimap); -// Convert "CONTENT_STONE"-style names to dynamic ids -std::string content_mapnode_get_new_name(const std::string &oldname); -class INodeDefManager; -content_t legacy_get_id(const std::string &oldname, INodeDefManager *ndef); -#define LEGN(ndef, oldname) legacy_get_id(oldname, ndef) - #endif - diff --git a/src/content_nodemeta.cpp b/src/content_nodemeta.cpp index 41d216ef..731fa421 100644 --- a/src/content_nodemeta.cpp +++ b/src/content_nodemeta.cpp @@ -79,7 +79,7 @@ static bool content_nodemeta_deserialize_legacy_body( inv->getList("0")->setName("main"); } assert(inv->getList("main") && !inv->getList("0")); - + meta->setString("formspec","size[8,9]" "list[current_name;main;0,0;8,4;]" "list[current_player;main;0,5;8,4;]"); @@ -96,7 +96,7 @@ static bool content_nodemeta_deserialize_legacy_body( inv->getList("0")->setName("main"); } assert(inv->getList("main") && !inv->getList("0")); - + meta->setString("formspec","size[8,9]" "list[current_name;main;0,0;8,4;]" "list[current_player;main;0,5;8,4;]"); @@ -145,7 +145,7 @@ static bool content_nodemeta_deserialize_legacy_meta( void content_nodemeta_deserialize_legacy(std::istream &is, NodeMetadataList *meta, NodeTimerList *timers, - IGameDef *gamedef) + IItemDefManager *item_def_mgr) { meta->clear(); timers->clear(); @@ -154,9 +154,9 @@ void content_nodemeta_deserialize_legacy(std::istream &is, if(version > 1) { - infostream<<__FUNCTION_NAME<<": version "<get(p) != NULL) { - infostream<<"WARNING: "<<__FUNCTION_NAME<<": " + warningstream<set(p, data); diff --git a/src/content_nodemeta.h b/src/content_nodemeta.h index 1d718089..03d238ad 100644 --- a/src/content_nodemeta.h +++ b/src/content_nodemeta.h @@ -24,7 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., class NodeMetadataList; class NodeTimerList; -class IGameDef; +class IItemDefManager; /* Legacy nodemeta definitions @@ -32,7 +32,7 @@ class IGameDef; void content_nodemeta_deserialize_legacy(std::istream &is, NodeMetadataList *meta, NodeTimerList *timers, - IGameDef *gamedef); + IItemDefManager *item_def_mgr); void content_nodemeta_serialize_legacy(std::ostream &os, NodeMetadataList *meta); diff --git a/src/content_sao.cpp b/src/content_sao.cpp index 24b3180f..3183fda6 100644 --- a/src/content_sao.cpp +++ b/src/content_sao.cpp @@ -23,7 +23,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "collision.h" #include "environment.h" #include "settings.h" -#include "profiler.h" #include "serialization.h" // For compressZlib #include "tool.h" // For ToolCapabilities #include "gamedef.h" @@ -136,6 +135,7 @@ LuaEntitySAO::LuaEntitySAO(ServerEnvironment *env, v3f pos, m_armor_groups_sent(false), m_animation_speed(0), m_animation_blend(0), + m_animation_loop(true), m_animation_sent(false), m_bone_position_sent(false), m_attachment_parent_id(0), @@ -324,7 +324,8 @@ void LuaEntitySAO::step(float dtime, bool send_recommended) if(m_animation_sent == false){ m_animation_sent = true; - std::string str = gob_cmd_update_animation(m_animation_range, m_animation_speed, m_animation_blend); + std::string str = gob_cmd_update_animation( + m_animation_range, m_animation_speed, m_animation_blend, m_animation_loop); // create message and add to list ActiveObjectMessage aom(getId(), true, str); m_messages_out.push(aom); @@ -366,7 +367,8 @@ std::string LuaEntitySAO::getClientInitializationData(u16 protocol_version) writeU8(os, 4 + m_bone_position.size()); // number of messages stuffed in here os< >::const_iterator ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii){ os<getWieldedItem(); punchitem = &punchitem_static; } @@ -442,31 +444,26 @@ int LuaEntitySAO::punch(v3f dir, punchitem, time_from_last_punch); - if(result.did_punch) - { + if (result.did_punch) { setHP(getHP() - result.damage); + if (result.damage > 0) { + std::string punchername = puncher ? puncher->getDescription() : "nil"; - std::string punchername = "nil"; - - if ( puncher != 0 ) - punchername = puncher->getDescription(); - - actionstream<getScriptIface()->luaentity_Punch(m_id, puncher, time_from_last_punch, toolcap, dir); @@ -475,10 +472,10 @@ int LuaEntitySAO::punch(v3f dir, void LuaEntitySAO::rightClick(ServerActiveObject *clicker) { - if(!m_registered) + if (!m_registered) return; // It's best that attachments cannot be clicked - if(isAttached()) + if (isAttached()) return; m_env->getScriptIface()->luaentity_Rightclick(m_id, clicker); } @@ -538,19 +535,21 @@ ItemGroupList LuaEntitySAO::getArmorGroups() return m_armor_groups; } -void LuaEntitySAO::setAnimation(v2f frame_range, float frame_speed, float frame_blend) +void LuaEntitySAO::setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop) { m_animation_range = frame_range; m_animation_speed = frame_speed; m_animation_blend = frame_blend; + m_animation_loop = frame_loop; m_animation_sent = false; } -void LuaEntitySAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend) +void LuaEntitySAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop) { *frame_range = m_animation_range; *frame_speed = m_animation_speed; *frame_blend = m_animation_blend; + *frame_loop = m_animation_loop; } void LuaEntitySAO::setBonePosition(const std::string &bone, v3f position, v3f rotation) @@ -591,6 +590,21 @@ void LuaEntitySAO::getAttachment(int *parent_id, std::string *bone, v3f *positio *rotation = m_attachment_rotation; } +void LuaEntitySAO::addAttachmentChild(int child_id) +{ + m_attachment_child_ids.insert(child_id); +} + +void LuaEntitySAO::removeAttachmentChild(int child_id) +{ + m_attachment_child_ids.erase(child_id); +} + +std::set LuaEntitySAO::getAttachmentChildIds() +{ + return m_attachment_child_ids; +} + ObjectProperties* LuaEntitySAO::accessObjectProperties() { return &m_prop; @@ -738,6 +752,7 @@ PlayerSAO::PlayerSAO(ServerEnvironment *env_, Player *player_, u16 peer_id_, m_is_singleplayer(is_singleplayer), m_animation_speed(0), m_animation_blend(0), + m_animation_loop(true), m_animation_sent(false), m_bone_position_sent(false), m_attachment_parent_id(0), @@ -806,8 +821,8 @@ void PlayerSAO::removingFromEnvironment() { m_player->setPlayerSAO(NULL); m_player->peer_id = 0; - m_env->savePlayer(m_player->getName()); - m_env->removePlayer(m_player->getName()); + m_env->savePlayer((RemotePlayer*)m_player); + m_env->removePlayer(m_player); } } @@ -833,7 +848,8 @@ std::string PlayerSAO::getClientInitializationData(u16 protocol_version) writeU8(os, 6 + m_bone_position.size()); // number of messages stuffed in here os< >::const_iterator ii = m_bone_position.begin(); ii != m_bone_position.end(); ++ii){ os<hp; + s16 hp_change = m_env->getScriptIface()->on_player_hpchange(this, + hp - oldhp); + if (hp_change == 0) + return; + hp = oldhp + hp_change; + if (hp < 0) hp = 0; else if (hp > PLAYER_MAX_HP) @@ -1165,20 +1188,22 @@ ItemGroupList PlayerSAO::getArmorGroups() return m_armor_groups; } -void PlayerSAO::setAnimation(v2f frame_range, float frame_speed, float frame_blend) +void PlayerSAO::setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop) { // store these so they can be updated to clients m_animation_range = frame_range; m_animation_speed = frame_speed; m_animation_blend = frame_blend; + m_animation_loop = frame_loop; m_animation_sent = false; } -void PlayerSAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend) +void PlayerSAO::getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop) { *frame_range = m_animation_range; *frame_speed = m_animation_speed; *frame_blend = m_animation_blend; + *frame_loop = m_animation_loop; } void PlayerSAO::setBonePosition(const std::string &bone, v3f position, v3f rotation) @@ -1220,6 +1245,21 @@ void PlayerSAO::getAttachment(int *parent_id, std::string *bone, v3f *position, *rotation = m_attachment_rotation; } +void PlayerSAO::addAttachmentChild(int child_id) +{ + m_attachment_child_ids.insert(child_id); +} + +void PlayerSAO::removeAttachmentChild(int child_id) +{ + m_attachment_child_ids.erase(child_id); +} + +std::set PlayerSAO::getAttachmentChildIds() +{ + return m_attachment_child_ids; +} + ObjectProperties* PlayerSAO::accessObjectProperties() { return &m_prop; diff --git a/src/content_sao.h b/src/content_sao.h index 758c82ea..ce586d7b 100644 --- a/src/content_sao.h +++ b/src/content_sao.h @@ -59,12 +59,15 @@ public: s16 getHP() const; void setArmorGroups(const ItemGroupList &armor_groups); ItemGroupList getArmorGroups(); - void setAnimation(v2f frame_range, float frame_speed, float frame_blend); - void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend); + void setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop); + void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop); void setBonePosition(const std::string &bone, v3f position, v3f rotation); void getBonePosition(const std::string &bone, v3f *position, v3f *rotation); void setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation); void getAttachment(int *parent_id, std::string *bone, v3f *position, v3f *rotation); + void addAttachmentChild(int child_id); + void removeAttachmentChild(int child_id); + std::set getAttachmentChildIds(); ObjectProperties* accessObjectProperties(); void notifyObjectPropertiesModified(); /* LuaEntitySAO-specific */ @@ -106,12 +109,14 @@ private: v2f m_animation_range; float m_animation_speed; float m_animation_blend; + bool m_animation_loop; bool m_animation_sent; std::map > m_bone_position; bool m_bone_position_sent; int m_attachment_parent_id; + std::set m_attachment_child_ids; std::string m_attachment_bone; v3f m_attachment_position; v3f m_attachment_rotation; @@ -197,12 +202,15 @@ public: void setBreath(u16 breath); void setArmorGroups(const ItemGroupList &armor_groups); ItemGroupList getArmorGroups(); - void setAnimation(v2f frame_range, float frame_speed, float frame_blend); - void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend); + void setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop); + void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop); void setBonePosition(const std::string &bone, v3f position, v3f rotation); void getBonePosition(const std::string &bone, v3f *position, v3f *rotation); void setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation); void getAttachment(int *parent_id, std::string *bone, v3f *position, v3f *rotation); + void addAttachmentChild(int child_id); + void removeAttachmentChild(int child_id); + std::set getAttachmentChildIds(); ObjectProperties* accessObjectProperties(); void notifyObjectPropertiesModified(); void setNametagColor(video::SColor color); @@ -312,12 +320,14 @@ private: v2f m_animation_range; float m_animation_speed; float m_animation_blend; + bool m_animation_loop; bool m_animation_sent; std::map > m_bone_position; // Stores position and rotation for each bone name bool m_bone_position_sent; int m_attachment_parent_id; + std::set m_attachment_child_ids; std::string m_attachment_bone; v3f m_attachment_position; v3f m_attachment_rotation; diff --git a/src/craftdef.cpp b/src/craftdef.cpp index 34edc681..b42dfd0f 100644 --- a/src/craftdef.cpp +++ b/src/craftdef.cpp @@ -112,10 +112,9 @@ static std::vector craftGetItemNames( const std::vector &itemstrings, IGameDef *gamedef) { std::vector result; - for (std::vector::const_iterator - it = itemstrings.begin(); - it != itemstrings.end(); it++) { - result.push_back(craftGetItemName(*it, gamedef)); + for (std::vector::size_type i = 0; + i < itemstrings.size(); i++) { + result.push_back(craftGetItemName(itemstrings[i], gamedef)); } return result; } @@ -125,10 +124,9 @@ static std::vector craftGetItemNames( const std::vector &items, IGameDef *gamedef) { std::vector result; - for (std::vector::const_iterator - it = items.begin(); - it != items.end(); it++) { - result.push_back(it->name); + for (std::vector::size_type i = 0; + i < items.size(); i++) { + result.push_back(items[i].name); } return result; } @@ -138,10 +136,9 @@ static std::vector craftGetItems( const std::vector &items, IGameDef *gamedef) { std::vector result; - for (std::vector::const_iterator - it = items.begin(); - it != items.end(); it++) { - result.push_back(ItemStack(std::string(*it), (u16)1, + for (std::vector::size_type i = 0; + i < items.size(); i++) { + result.push_back(ItemStack(std::string(items[i]), (u16)1, (u16)0, "", gamedef->getItemDefManager())); } return result; @@ -156,11 +153,10 @@ static bool craftGetBounds(const std::vector &items, unsigned int w bool success = false; unsigned int x = 0; unsigned int y = 0; - for (std::vector::const_iterator - it = items.begin(); - it != items.end(); it++) { + for (std::vector::size_type i = 0; + i < items.size(); i++) { // Is this an actual item? - if (*it != "") { + if (items[i] != "") { if (!success) { // This is the first nonempty item min_x = max_x = x; @@ -187,11 +183,10 @@ static bool craftGetBounds(const std::vector &items, unsigned int w // Removes 1 from each item stack static void craftDecrementInput(CraftInput &input, IGameDef *gamedef) { - for (std::vector::iterator - it = input.items.begin(); - it != input.items.end(); it++) { - if (it->count != 0) - it->remove(1); + for (std::vector::size_type i = 0; + i < input.items.size(); i++) { + if (input.items[i].count != 0) + input.items[i].remove(1); } } @@ -199,6 +194,7 @@ static void craftDecrementInput(CraftInput &input, IGameDef *gamedef) // Example: if replacements contains the pair ("bucket:bucket_water", "bucket:bucket_empty"), // a water bucket will not be removed but replaced by an empty bucket. static void craftDecrementOrReplaceInput(CraftInput &input, + std::vector &output_replacements, const CraftReplacements &replacements, IGameDef *gamedef) { @@ -210,29 +206,33 @@ static void craftDecrementOrReplaceInput(CraftInput &input, // Make a copy of the replacements pair list std::vector > pairs = replacements.pairs; - for (std::vector::iterator - it = input.items.begin(); - it != input.items.end(); it++) { - if (it->count == 1) { - // Find an appropriate replacement - bool found_replacement = false; - for (std::vector >::iterator - j = pairs.begin(); - j != pairs.end(); j++) { - if (it->name == craftGetItemName(j->first, gamedef)) { - it->deSerialize(j->second, gamedef->idef()); + for (std::vector::size_type i = 0; + i < input.items.size(); i++) { + ItemStack &item = input.items[i]; + // Find an appropriate replacement + bool found_replacement = false; + for (std::vector >::iterator + j = pairs.begin(); + j != pairs.end(); ++j) { + if (item.name == craftGetItemName(j->first, gamedef)) { + if (item.count == 1) { + item.deSerialize(j->second, gamedef->idef()); found_replacement = true; pairs.erase(j); break; + } else { + ItemStack rep; + rep.deSerialize(j->second, gamedef->idef()); + item.remove(1); + found_replacement = true; + output_replacements.push_back(rep); + break; } } - // No replacement was found, simply decrement count to zero - if (!found_replacement) - it->remove(1); - } else if (it->count >= 2) { - // Ignore replacements for items with count >= 2 - it->remove(1); } + // No replacement was found, simply decrement count by one + if (!found_replacement && item.count > 0) + item.remove(1); } } @@ -241,18 +241,17 @@ static std::string craftDumpMatrix(const std::vector &items, unsigned int width) { std::ostringstream os(std::ios::binary); - os<<"{ "; + os << "{ "; unsigned int x = 0; - for(std::vector::const_iterator - it = items.begin(); - it != items.end(); it++, x++) { + for(std::vector::size_type i = 0; + i < items.size(); i++, x++) { if (x == width) { - os<<"; "; + os << "; "; x = 0; } else if (x != 0) { - os<<","; + os << ","; } - os << '"' << (*it) << '"'; + os << '"' << items[i] << '"'; } os << " }"; return os.str(); @@ -265,16 +264,15 @@ std::string craftDumpMatrix(const std::vector &items, std::ostringstream os(std::ios::binary); os << "{ "; unsigned int x = 0; - for (std::vector::const_iterator - it = items.begin(); - it != items.end(); it++, x++) { + for (std::vector::size_type i = 0; + i < items.size(); i++, x++) { if (x == width) { os << "; "; x = 0; } else if (x != 0) { - os<<","; + os << ","; } - os << '"' << (it->getItemString()) << '"'; + os << '"' << (items[i].getItemString()) << '"'; } os << " }"; return os.str(); @@ -313,10 +311,12 @@ std::string CraftReplacements::dump() const std::ostringstream os(std::ios::binary); os<<"{"; const char *sep = ""; - for (std::vector >::const_iterator - it = pairs.begin(); - it != pairs.end(); it++) { - os << sep << '"' << (it->first) << "\"=>\"" << (it->second) << '"'; + for (std::vector >::size_type i = 0; + i < pairs.size(); i++) { + const std::pair &repl_p = pairs[i]; + os << sep + << '"' << (repl_p.first) + << "\"=>\"" << (repl_p.second) << '"'; sep = ","; } os << "}"; @@ -408,9 +408,10 @@ CraftInput CraftDefinitionShaped::getInput(const CraftOutput &output, IGameDef * return CraftInput(CRAFT_METHOD_NORMAL,width,craftGetItems(recipe,gamedef)); } -void CraftDefinitionShaped::decrementInput(CraftInput &input, IGameDef *gamedef) const +void CraftDefinitionShaped::decrementInput(CraftInput &input, std::vector &output_replacements, + IGameDef *gamedef) const { - craftDecrementOrReplaceInput(input, replacements, gamedef); + craftDecrementOrReplaceInput(input, output_replacements, replacements, gamedef); } CraftHashType CraftDefinitionShaped::getHashType() const @@ -473,11 +474,11 @@ bool CraftDefinitionShapeless::check(const CraftInput &input, IGameDef *gamedef) // Filter empty items out of input std::vector input_filtered; - for (std::vector::const_iterator - it = input.items.begin(); - it != input.items.end(); it++) { - if (it->name != "") - input_filtered.push_back(it->name); + for (std::vector::size_type i = 0; + i < input.items.size(); i++) { + const ItemStack &item = input.items[i]; + if (item.name != "") + input_filtered.push_back(item.name); } // If there is a wrong number of items in input, no match @@ -529,9 +530,10 @@ CraftInput CraftDefinitionShapeless::getInput(const CraftOutput &output, IGameDe return CraftInput(CRAFT_METHOD_NORMAL, 0, craftGetItems(recipe, gamedef)); } -void CraftDefinitionShapeless::decrementInput(CraftInput &input, IGameDef *gamedef) const +void CraftDefinitionShapeless::decrementInput(CraftInput &input, std::vector &output_replacements, + IGameDef *gamedef) const { - craftDecrementOrReplaceInput(input, replacements, gamedef); + craftDecrementOrReplaceInput(input, output_replacements, replacements, gamedef); } CraftHashType CraftDefinitionShapeless::getHashType() const @@ -620,14 +622,14 @@ bool CraftDefinitionToolRepair::check(const CraftInput &input, IGameDef *gamedef ItemStack item1; ItemStack item2; - for (std::vector::const_iterator - it = input.items.begin(); - it != input.items.end(); it++) { - if (!it->empty()) { + for (std::vector::size_type i = 0; + i < input.items.size(); i++) { + const ItemStack &item = input.items[i]; + if (!item.empty()) { if (item1.empty()) - item1 = *it; + item1 = item; else if (item2.empty()) - item2 = *it; + item2 = item; else return false; } @@ -640,14 +642,14 @@ CraftOutput CraftDefinitionToolRepair::getOutput(const CraftInput &input, IGameD { ItemStack item1; ItemStack item2; - for (std::vector::const_iterator - it = input.items.begin(); - it != input.items.end(); it++) { - if (!it->empty()) { + for (std::vector::size_type i = 0; + i < input.items.size(); i++) { + const ItemStack &item = input.items[i]; + if (!item.empty()) { if (item1.empty()) - item1 = *it; + item1 = item; else if (item2.empty()) - item2 = *it; + item2 = item; } } ItemStack repaired = craftToolRepair(item1, item2, additional_wear, gamedef); @@ -661,7 +663,8 @@ CraftInput CraftDefinitionToolRepair::getInput(const CraftOutput &output, IGameD return CraftInput(CRAFT_METHOD_COOKING, additional_wear, stack); } -void CraftDefinitionToolRepair::decrementInput(CraftInput &input, IGameDef *gamedef) const +void CraftDefinitionToolRepair::decrementInput(CraftInput &input, std::vector &output_replacements, + IGameDef *gamedef) const { craftDecrementInput(input, gamedef); } @@ -689,11 +692,11 @@ bool CraftDefinitionCooking::check(const CraftInput &input, IGameDef *gamedef) c // Filter empty items out of input std::vector input_filtered; - for (std::vector::const_iterator - it = input.items.begin(); - it != input.items.end(); it++) { - if (it->name != "") - input_filtered.push_back(it->name); + for (std::vector::size_type i = 0; + i < input.items.size(); i++) { + const std::string &name = input.items[i].name; + if (name != "") + input_filtered.push_back(name); } // If there is a wrong number of items in input, no match @@ -720,9 +723,10 @@ CraftInput CraftDefinitionCooking::getInput(const CraftOutput &output, IGameDef return CraftInput(CRAFT_METHOD_COOKING,cooktime,craftGetItems(rec,gamedef)); } -void CraftDefinitionCooking::decrementInput(CraftInput &input, IGameDef *gamedef) const +void CraftDefinitionCooking::decrementInput(CraftInput &input, std::vector &output_replacements, + IGameDef *gamedef) const { - craftDecrementOrReplaceInput(input, replacements, gamedef); + craftDecrementOrReplaceInput(input, output_replacements, replacements, gamedef); } CraftHashType CraftDefinitionCooking::getHashType() const @@ -780,11 +784,11 @@ bool CraftDefinitionFuel::check(const CraftInput &input, IGameDef *gamedef) cons // Filter empty items out of input std::vector input_filtered; - for (std::vector::const_iterator - it = input.items.begin(); - it != input.items.end(); it++) { - if (it->name != "") - input_filtered.push_back(it->name); + for (std::vector::size_type i = 0; + i < input.items.size(); i++) { + const std::string &name = input.items[i].name; + if (name != "") + input_filtered.push_back(name); } // If there is a wrong number of items in input, no match @@ -811,9 +815,10 @@ CraftInput CraftDefinitionFuel::getInput(const CraftOutput &output, IGameDef *ga return CraftInput(CRAFT_METHOD_COOKING,(int)burntime,craftGetItems(rec,gamedef)); } -void CraftDefinitionFuel::decrementInput(CraftInput &input, IGameDef *gamedef) const +void CraftDefinitionFuel::decrementInput(CraftInput &input, std::vector &output_replacements, + IGameDef *gamedef) const { - craftDecrementOrReplaceInput(input, replacements, gamedef); + craftDecrementOrReplaceInput(input, output_replacements, replacements, gamedef); } CraftHashType CraftDefinitionFuel::getHashType() const @@ -871,17 +876,17 @@ public: } virtual bool getCraftResult(CraftInput &input, CraftOutput &output, - bool decrementInput, IGameDef *gamedef) const + std::vector &output_replacement, bool decrementInput, + IGameDef *gamedef) const { output.item = ""; output.time = 0; // If all input items are empty, abort. bool all_empty = true; - for (std::vector::const_iterator - it = input.items.begin(); - it != input.items.end(); it++) { - if (!it->empty()) { + for (std::vector::size_type i = 0; + i < input.items.size(); i++) { + if (!input.items[i].empty()) { all_empty = false; break; } @@ -910,10 +915,9 @@ public: const std::vector &hash_collisions = col_iter->second; // Walk crafting definitions from back to front, so that later // definitions can override earlier ones. - for (std::vector::const_reverse_iterator - it = hash_collisions.rbegin(); - it != hash_collisions.rend(); it++) { - CraftDefinition *def = *it; + for (std::vector::size_type + i = hash_collisions.size(); i > 0; i--) { + CraftDefinition *def = hash_collisions[i - 1]; /*errorstream << "Checking " << input.dump() << std::endl << " against " << def->dump() << std::endl;*/ @@ -922,7 +926,7 @@ public: // Get output, then decrement input (if requested) output = def->getOutput(input, gamedef); if (decrementInput) - def->decrementInput(input, gamedef); + def->decrementInput(input, output_replacement, gamedef); /*errorstream << "Check RETURNS TRUE" << std::endl;*/ return true; } @@ -946,11 +950,12 @@ public: recipes.reserve(limit ? MYMIN(limit, vec.size()) : vec.size()); - for (std::vector::const_reverse_iterator - it = vec.rbegin(); it != vec.rend(); ++it) { + for (std::vector::size_type i = vec.size(); + i > 0; i--) { + CraftDefinition *def = vec[i - 1]; if (limit && recipes.size() >= limit) break; - recipes.push_back(*it); + recipes.push_back(def); } return recipes; @@ -959,13 +964,16 @@ public: { std::ostringstream os(std::ios::binary); os << "Crafting definitions:\n"; - for (int type = 0; type <= craft_hash_type_max; type++) { + for (int type = 0; type <= craft_hash_type_max; ++type) { for (std::map >::const_iterator it = (m_craft_defs[type]).begin(); - it != (m_craft_defs[type]).end(); it++) { - for (std::vector::const_iterator - iit = it->second.begin(); iit != it->second.end(); iit++) { - os << "type " << type << " hash " << it->first << (*iit)->dump() << "\n"; + it != (m_craft_defs[type]).end(); ++it) { + for (std::vector::size_type i = 0; + i < it->second.size(); i++) { + os << "type " << type + << " hash " << it->first + << " def " << it->second[i]->dump() + << "\n"; } } } @@ -984,12 +992,13 @@ public: } virtual void clear() { - for (int type = 0; type <= craft_hash_type_max; type++) { + for (int type = 0; type <= craft_hash_type_max; ++type) { for (std::map >::iterator it = m_craft_defs[type].begin(); - it != m_craft_defs[type].end(); it++) { + it != m_craft_defs[type].end(); ++it) { for (std::vector::iterator - iit = it->second.begin(); iit != it->second.end(); iit++) { + iit = it->second.begin(); + iit != it->second.end(); ++iit) { delete *iit; } it->second.clear(); @@ -1001,10 +1010,11 @@ public: virtual void initHashes(IGameDef *gamedef) { // Move the CraftDefs from the unhashed layer into layers higher up. - for (std::vector::iterator - it = (m_craft_defs[(int) CRAFT_HASH_TYPE_UNHASHED][0]).begin(); - it != (m_craft_defs[(int) CRAFT_HASH_TYPE_UNHASHED][0]).end(); it++) { - CraftDefinition *def = *it; + std::vector &unhashed = + m_craft_defs[(int) CRAFT_HASH_TYPE_UNHASHED][0]; + for (std::vector::size_type i = 0; + i < unhashed.size(); i++) { + CraftDefinition *def = unhashed[i]; // Initialize and get the definition's hash def->initHash(gamedef); @@ -1014,7 +1024,7 @@ public: // Enter the definition m_craft_defs[type][hash].push_back(def); } - m_craft_defs[(int) CRAFT_HASH_TYPE_UNHASHED][0].clear(); + unhashed.clear(); } private: //TODO: change both maps to unordered_map when c++11 can be used diff --git a/src/craftdef.h b/src/craftdef.h index d57b917f..08535347 100644 --- a/src/craftdef.h +++ b/src/craftdef.h @@ -150,7 +150,8 @@ public: // the inverse of the above virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const=0; // Decreases count of every input item - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const=0; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const=0; virtual CraftHashType getHashType() const = 0; virtual u64 getHash(CraftHashType type) const = 0; @@ -187,7 +188,8 @@ public: virtual bool check(const CraftInput &input, IGameDef *gamedef) const; virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const; virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const; - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const; virtual CraftHashType getHashType() const; virtual u64 getHash(CraftHashType type) const; @@ -235,7 +237,8 @@ public: virtual bool check(const CraftInput &input, IGameDef *gamedef) const; virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const; virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const; - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const; virtual CraftHashType getHashType() const; virtual u64 getHash(CraftHashType type) const; @@ -278,7 +281,8 @@ public: virtual bool check(const CraftInput &input, IGameDef *gamedef) const; virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const; virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const; - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const; virtual CraftHashType getHashType() const { return CRAFT_HASH_TYPE_COUNT; } virtual u64 getHash(CraftHashType type) const { return 2; } @@ -320,7 +324,8 @@ public: virtual bool check(const CraftInput &input, IGameDef *gamedef) const; virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const; virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const; - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const; virtual CraftHashType getHashType() const; virtual u64 getHash(CraftHashType type) const; @@ -365,7 +370,8 @@ public: virtual bool check(const CraftInput &input, IGameDef *gamedef) const; virtual CraftOutput getOutput(const CraftInput &input, IGameDef *gamedef) const; virtual CraftInput getInput(const CraftOutput &output, IGameDef *gamedef) const; - virtual void decrementInput(CraftInput &input, IGameDef *gamedef) const; + virtual void decrementInput(CraftInput &input, + std::vector &output_replacements, IGameDef *gamedef) const; virtual CraftHashType getHashType() const; virtual u64 getHash(CraftHashType type) const; @@ -398,6 +404,7 @@ public: // The main crafting function virtual bool getCraftResult(CraftInput &input, CraftOutput &output, + std::vector &output_replacements, bool decrementInput, IGameDef *gamedef) const=0; virtual std::vector getCraftRecipes(CraftOutput &output, IGameDef *gamedef, unsigned limit=0) const=0; @@ -414,6 +421,7 @@ public: // The main crafting function virtual bool getCraftResult(CraftInput &input, CraftOutput &output, + std::vector &output_replacements, bool decrementInput, IGameDef *gamedef) const=0; virtual std::vector getCraftRecipes(CraftOutput &output, IGameDef *gamedef, unsigned limit=0) const=0; diff --git a/src/database-leveldb.cpp b/src/database-leveldb.cpp index bcc27822..041e7e6a 100644 --- a/src/database-leveldb.cpp +++ b/src/database-leveldb.cpp @@ -57,7 +57,7 @@ bool Database_LevelDB::saveBlock(const v3s16 &pos, const std::string &data) leveldb::Status status = m_database->Put(leveldb::WriteOptions(), i64tos(getBlockAsInteger(pos)), data); if (!status.ok()) { - errorstream << "WARNING: saveBlock: LevelDB error saving block " + warningstream << "saveBlock: LevelDB error saving block " << PP(pos) << ": " << status.ToString() << std::endl; return false; } @@ -82,7 +82,7 @@ bool Database_LevelDB::deleteBlock(const v3s16 &pos) leveldb::Status status = m_database->Delete(leveldb::WriteOptions(), i64tos(getBlockAsInteger(pos))); if (!status.ok()) { - errorstream << "WARNING: deleteBlock: LevelDB error deleting block " + warningstream << "deleteBlock: LevelDB error deleting block " << PP(pos) << ": " << status.ToString() << std::endl; return false; } diff --git a/src/database-redis.cpp b/src/database-redis.cpp index 713b7c3a..1f4ba795 100644 --- a/src/database-redis.cpp +++ b/src/database-redis.cpp @@ -84,14 +84,14 @@ bool Database_Redis::saveBlock(const v3s16 &pos, const std::string &data) redisReply *reply = static_cast(redisCommand(ctx, "HSET %s %s %b", hash.c_str(), tmp.c_str(), data.c_str(), data.size())); if (!reply) { - errorstream << "WARNING: saveBlock: redis command 'HSET' failed on " + warningstream << "saveBlock: redis command 'HSET' failed on " "block " << PP(pos) << ": " << ctx->errstr << std::endl; freeReplyObject(reply); return false; } if (reply->type == REDIS_REPLY_ERROR) { - errorstream << "WARNING: saveBlock: saving block " << PP(pos) + warningstream << "saveBlock: saving block " << PP(pos) << " failed: " << reply->str << std::endl; freeReplyObject(reply); return false; @@ -118,12 +118,26 @@ std::string Database_Redis::loadBlock(const v3s16 &pos) freeReplyObject(reply); return str; } - case REDIS_REPLY_ERROR: - errorstream << "WARNING: loadBlock: loading block " << PP(pos) - << " failed: " << reply->str << std::endl; + case REDIS_REPLY_ERROR: { + std::string errstr = reply->str; + freeReplyObject(reply); + errorstream << "loadBlock: loading block " << PP(pos) + << " failed: " << errstr << std::endl; + throw FileNotGoodException(std::string( + "Redis command 'HGET %s %s' errored: ") + errstr); } + case REDIS_REPLY_NIL: { + // block not found in database + freeReplyObject(reply); + return ""; + } + } + errorstream << "loadBlock: loading block " << PP(pos) + << " returned invalid reply type " << reply->type + << ": " << reply->str << std::endl; freeReplyObject(reply); - return ""; + throw FileNotGoodException(std::string( + "Redis command 'HGET %s %s' gave invalid reply.")); } bool Database_Redis::deleteBlock(const v3s16 &pos) @@ -136,7 +150,7 @@ bool Database_Redis::deleteBlock(const v3s16 &pos) throw FileNotGoodException(std::string( "Redis command 'HDEL %s %s' failed: ") + ctx->errstr); } else if (reply->type == REDIS_REPLY_ERROR) { - errorstream << "WARNING: deleteBlock: deleting block " << PP(pos) + warningstream << "deleteBlock: deleting block " << PP(pos) << " failed: " << reply->str << std::endl; freeReplyObject(reply); return false; diff --git a/src/database-sqlite3.cpp b/src/database-sqlite3.cpp index 889c7997..404c3b41 100644 --- a/src/database-sqlite3.cpp +++ b/src/database-sqlite3.cpp @@ -153,7 +153,7 @@ bool Database_SQLite3::deleteBlock(const v3s16 &pos) sqlite3_reset(m_stmt_delete); if (!good) { - errorstream << "WARNING: deleteBlock: Block failed to delete " + warningstream << "deleteBlock: Block failed to delete " << PP(pos) << ": " << sqlite3_errmsg(m_database) << std::endl; } return good; diff --git a/src/debug.cpp b/src/debug.cpp index 40a253c2..0469d3d5 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -26,8 +26,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include -#include "jthread/jmutex.h" -#include "jthread/jmutexautolock.h" +#include +#include "threading/mutex.h" +#include "threading/mutex_auto_lock.h" #include "config.h" #ifdef _MSC_VER @@ -36,99 +37,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "filesys.h" #endif -/* - Debug output -*/ - -#define DEBUGSTREAM_COUNT 2 - -FILE *g_debugstreams[DEBUGSTREAM_COUNT] = {stderr, NULL}; - -#define DEBUGPRINT(...)\ -{\ - for(int i=0; i g_debug_stacks; -JMutex g_debug_stacks_mutex; +Mutex g_debug_stacks_mutex; void debug_stacks_init() { @@ -237,7 +148,7 @@ void debug_stacks_init() void debug_stacks_print_to(std::ostream &os) { - JMutexAutoLock lock(g_debug_stacks_mutex); + MutexAutoLock lock(g_debug_stacks_mutex); os<<"Debug stacks:"<::iterator - i = g_debug_stacks.begin(); - i != g_debug_stacks.end(); ++i) - { - DebugStack *stack = i->second; - - for(int i=0; iprint(g_debugstreams[i], true); - } - } + debug_stacks_print_to(errorstream); } DebugStacker::DebugStacker(const char *text) { - threadid_t threadid = get_current_thread_id(); + threadid_t threadid = thr_get_current_thread_id(); - JMutexAutoLock lock(g_debug_stacks_mutex); + MutexAutoLock lock(g_debug_stacks_mutex); std::map::iterator n; n = g_debug_stacks.find(threadid); @@ -307,7 +203,7 @@ DebugStacker::DebugStacker(const char *text) DebugStacker::~DebugStacker() { - JMutexAutoLock lock(g_debug_stacks_mutex); + MutexAutoLock lock(g_debug_stacks_mutex); if(m_overflowed == true) return; diff --git a/src/debug.h b/src/debug.h index 71f2e50b..37fb8a67 100644 --- a/src/debug.h +++ b/src/debug.h @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include "gettime.h" +#include "log.h" #if (defined(WIN32) || defined(_WIN32_WCE)) #define WIN32_LEAN_AND_MEAN @@ -34,15 +35,15 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifdef _MSC_VER #include #endif - #define __NORETURN __declspec(noreturn) - #define __FUNCTION_NAME __FUNCTION__ + #define NORETURN __declspec(noreturn) + #define FUNCTION_NAME __FUNCTION__ #else - #define __NORETURN __attribute__ ((__noreturn__)) - #define __FUNCTION_NAME __PRETTY_FUNCTION__ + #define NORETURN __attribute__ ((__noreturn__)) + #define FUNCTION_NAME __PRETTY_FUNCTION__ #endif // Whether to catch all std::exceptions. -// Assert will be called on such an event. +// When "catching", the program will abort with an error message. // In debug mode, leave these for the debugger and don't catch them. #ifdef NDEBUG #define CATCH_UNHANDLED_EXCEPTIONS 1 @@ -50,42 +51,18 @@ with this program; if not, write to the Free Software Foundation, Inc., #define CATCH_UNHANDLED_EXCEPTIONS 0 #endif -/* - Debug output -*/ - -#define DTIME (getTimestamp()+": ") - -extern void debugstreams_init(bool disable_stderr, const char *filename); -extern void debugstreams_deinit(); - -// This is used to redirect output to /dev/null -class Nullstream : public std::ostream { -public: - Nullstream(): - std::ostream(0) - { - } -private: -}; - -extern std::ostream dstream; -extern std::ostream dstream_no_stderr; -extern Nullstream dummyout; - - /* Abort program execution immediately */ -__NORETURN extern void fatal_error_fn( +NORETURN extern void fatal_error_fn( const char *msg, const char *file, unsigned int line, const char *function); #define FATAL_ERROR(msg) \ - fatal_error_fn((msg), __FILE__, __LINE__, __FUNCTION_NAME) + fatal_error_fn((msg), __FILE__, __LINE__, FUNCTION_NAME) #define FATAL_ERROR_IF(expr, msg) \ ((expr) \ - ? fatal_error_fn((msg), __FILE__, __LINE__, __FUNCTION_NAME) \ + ? fatal_error_fn((msg), __FILE__, __LINE__, FUNCTION_NAME) \ : (void)(0)) /* @@ -94,14 +71,14 @@ __NORETURN extern void fatal_error_fn( defined) */ -__NORETURN extern void sanity_check_fn( +NORETURN extern void sanity_check_fn( const char *assertion, const char *file, unsigned int line, const char *function); #define SANITY_CHECK(expr) \ ((expr) \ ? (void)(0) \ - : sanity_check_fn(#expr, __FILE__, __LINE__, __FUNCTION_NAME)) + : sanity_check_fn(#expr, __FILE__, __LINE__, FUNCTION_NAME)) #define sanity_check(expr) SANITY_CHECK(expr) @@ -145,16 +122,16 @@ private: #if CATCH_UNHANDLED_EXCEPTIONS == 1 #define BEGIN_DEBUG_EXCEPTION_HANDLER try { - #define END_DEBUG_EXCEPTION_HANDLER(logstream) \ - } catch (std::exception &e) { \ - logstream << "ERROR: An unhandled exception occurred: " \ - << e.what() << std::endl; \ - assert(0); \ + #define END_DEBUG_EXCEPTION_HANDLER \ + } catch (std::exception &e) { \ + errorstream << "An unhandled exception occurred: " \ + << e.what() << std::endl; \ + FATAL_ERROR(e.what()); \ } #else // Dummy ones #define BEGIN_DEBUG_EXCEPTION_HANDLER - #define END_DEBUG_EXCEPTION_HANDLER(logstream) + #define END_DEBUG_EXCEPTION_HANDLER #endif #endif // DEBUG_HEADER diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index 3484e23d..f683b9e9 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -33,6 +33,7 @@ void set_default_settings(Settings *settings) // Client stuff settings->setDefault("remote_port", "30000"); settings->setDefault("keymap_forward", "KEY_KEY_W"); + settings->setDefault("keymap_autorun", ""); settings->setDefault("keymap_backward", "KEY_KEY_S"); settings->setDefault("keymap_left", "KEY_KEY_A"); settings->setDefault("keymap_right", "KEY_KEY_D"); @@ -43,6 +44,7 @@ void set_default_settings(Settings *settings) settings->setDefault("keymap_special1", "KEY_KEY_E"); settings->setDefault("keymap_chat", "KEY_KEY_T"); settings->setDefault("keymap_cmd", "/"); + settings->setDefault("keymap_minimap", "KEY_F9"); settings->setDefault("keymap_console", "KEY_F10"); settings->setDefault("keymap_rangeselect", "KEY_KEY_R"); settings->setDefault("keymap_freemove", "KEY_KEY_K"); @@ -57,7 +59,7 @@ void set_default_settings(Settings *settings) #if DEBUG "KEY_F4"); #else - "none"); + ""); #endif settings->setDefault("keymap_toggle_debug", "KEY_F5"); settings->setDefault("keymap_toggle_profiler", "KEY_F6"); @@ -86,20 +88,13 @@ void set_default_settings(Settings *settings) #else settings->setDefault("show_debug", "true"); #endif - -#ifdef __ANDROID__ - settings->setDefault("wanted_fps", "15"); - settings->setDefault("fps_max", "30"); - settings->setDefault("pause_fps_max", "10"); -#else settings->setDefault("wanted_fps", "20"); settings->setDefault("fps_max", "60"); settings->setDefault("pause_fps_max", "15"); -#endif - // A bit more than the server will send around the player, to make fog blend well settings->setDefault("viewing_range_nodes_max", "240"); settings->setDefault("viewing_range_nodes_min", "35"); + settings->setDefault("map_generation_limit", "31000"); settings->setDefault("screenW", "800"); settings->setDefault("screenH", "600"); settings->setDefault("fullscreen", "false"); @@ -108,12 +103,13 @@ void set_default_settings(Settings *settings) settings->setDefault("vsync", "false"); settings->setDefault("address", ""); settings->setDefault("random_input", "false"); - settings->setDefault("client_unload_unused_data_timeout", "300"); + settings->setDefault("client_unload_unused_data_timeout", "600"); + settings->setDefault("client_mapblock_limit", "5000"); settings->setDefault("enable_fog", "true"); settings->setDefault("fov", "72"); settings->setDefault("view_bobbing", "true"); settings->setDefault("new_style_water", "false"); - settings->setDefault("new_style_leaves", "true"); + settings->setDefault("leaves_style", "fancy"); settings->setDefault("connected_glass", "false"); settings->setDefault("smooth_lighting", "true"); settings->setDefault("display_gamma", "1.8"); @@ -132,11 +128,7 @@ void set_default_settings(Settings *settings) settings->setDefault("screenshot_path", "."); settings->setDefault("view_bobbing_amount", "1.0"); settings->setDefault("fall_bobbing_amount", "1.0"); -#ifdef __ANDROID__ - settings->setDefault("enable_3d_clouds", "false"); -#else settings->setDefault("enable_3d_clouds", "true"); -#endif settings->setDefault("cloud_height", "120"); settings->setDefault("cloud_radius", "12"); settings->setDefault("menu_clouds", "false"); @@ -151,11 +143,7 @@ void set_default_settings(Settings *settings) settings->setDefault("gui_scaling", "1.0"); settings->setDefault("gui_scaling_filter", "false"); settings->setDefault("gui_scaling_filter_txr2img", "true"); -#ifdef __ANDROID__ settings->setDefault("mouse_sensitivity", "0.05"); -#else - settings->setDefault("mouse_sensitivity", "0.2"); -#endif settings->setDefault("enable_sound", "true"); settings->setDefault("sound_volume", "1"); settings->setDefault("desynchronize_mapblock_texture_animation", "true"); @@ -175,8 +163,10 @@ void set_default_settings(Settings *settings) settings->setDefault("generate_normalmaps", "false"); settings->setDefault("normalmaps_strength", "0.6"); settings->setDefault("normalmaps_smooth", "1"); - settings->setDefault("parallax_occlusion_scale", "0.06"); - settings->setDefault("parallax_occlusion_bias", "0.03"); + settings->setDefault("parallax_occlusion_mode", "1"); + settings->setDefault("parallax_occlusion_iterations", "4"); + settings->setDefault("parallax_occlusion_scale", "0.08"); + settings->setDefault("parallax_occlusion_bias", "0.04"); settings->setDefault("enable_waving_water", "false"); settings->setDefault("water_wave_height", "1.0"); settings->setDefault("water_wave_length", "20.0"); @@ -187,7 +177,11 @@ void set_default_settings(Settings *settings) settings->setDefault("enable_shaders", "true"); settings->setDefault("repeat_rightclick_time", "0.25"); settings->setDefault("enable_particles", "true"); - settings->setDefault("enable_mesh_cache", "true"); + settings->setDefault("enable_mesh_cache", "false"); + + settings->setDefault("enable_minimap", "true"); + settings->setDefault("minimap_shape_round", "true"); + settings->setDefault("minimap_double_scan_height", "true"); settings->setDefault("curl_timeout", "5000"); settings->setDefault("curl_parallel_limit", "8"); @@ -251,6 +245,7 @@ void set_default_settings(Settings *settings) settings->setDefault("default_privs", "interact, shout"); settings->setDefault("player_transfer_distance", "0"); settings->setDefault("enable_pvp", "true"); + settings->setDefault("vertical_spawn_range", "16"); settings->setDefault("disallow_empty_password", "false"); settings->setDefault("disable_anticheat", "false"); settings->setDefault("enable_rollback_recording", "false"); @@ -260,6 +255,10 @@ void set_default_settings(Settings *settings) settings->setDefault("deprecated_lua_api_handling", "log"); #endif + settings->setDefault("kick_msg_shutdown", "Server shutting down."); + settings->setDefault("kick_msg_crash", "This server has experienced an internal error. You will now be disconnected."); + settings->setDefault("ask_reconnect_on_crash", "false"); + settings->setDefault("profiler_print_interval", "0"); settings->setDefault("enable_mapgen_debug_info", "false"); settings->setDefault("active_object_send_range_blocks", "3"); @@ -273,7 +272,6 @@ void set_default_settings(Settings *settings) settings->setDefault("max_clearobjects_extra_loaded_blocks", "4096"); settings->setDefault("time_send_interval", "5"); settings->setDefault("time_speed", "72"); - settings->setDefault("year_days", "30"); settings->setDefault("server_unload_unused_data_timeout", "29"); settings->setDefault("max_objects_per_block", "49"); settings->setDefault("server_map_save_interval", "5.3"); @@ -282,7 +280,7 @@ void set_default_settings(Settings *settings) settings->setDefault("dedicated_server_step", "0.1"); settings->setDefault("ignore_world_load_errors", "false"); settings->setDefault("remote_media", ""); - settings->setDefault("debug_log_level", "2"); + settings->setDefault("debug_log_level", "action"); settings->setDefault("emergequeue_limit_total", "256"); settings->setDefault("emergequeue_limit_diskonly", "32"); settings->setDefault("emergequeue_limit_generate", "32"); @@ -315,7 +313,6 @@ void set_default_settings(Settings *settings) settings->setDefault("chunksize", "5"); settings->setDefault("mg_flags", "dungeons"); settings->setDefault("mgv6_spflags", "jungles, snowbiomes"); - settings->setDefault("enable_floating_dungeons", "true"); // IPv6 settings->setDefault("enable_ipv6", "true"); @@ -343,15 +340,17 @@ void set_default_settings(Settings *settings) settings->setDefault("TMPFolder","/sdcard/" PROJECT_NAME_C "/tmp/"); settings->setDefault("touchscreen_threshold","20"); settings->setDefault("smooth_lighting", "false"); - settings->setDefault("max_simultaneous_block_sends_per_client", "3"); settings->setDefault("emergequeue_limit_diskonly", "8"); settings->setDefault("emergequeue_limit_generate", "8"); settings->setDefault("preload_item_visuals", "false"); - - settings->setDefault("viewing_range_nodes_max", "75"); + settings->setDefault("viewing_range_nodes_max", "100"); settings->setDefault("viewing_range_nodes_min", "25"); settings->setDefault("inventory_image_hack", "true"); - + settings->setDefault("mouse_sensitivity", "0.05"); + settings->setDefault("enable_3d_clouds", "false"); + settings->setDefault("wanted_fps", "20"); + settings->setDefault("fps_max", "35"); + settings->setDefault("pause_fps_max", "10"); //check for device with small screen float x_inches = ((double) porting::getDisplaySize().X / (160 * porting::getDisplayDensity())); diff --git a/src/drawscene.cpp b/src/drawscene.cpp index 3d2e7a60..895daa9f 100644 --- a/src/drawscene.cpp +++ b/src/drawscene.cpp @@ -416,10 +416,11 @@ void draw_plain(Camera& camera, bool show_hud, Hud& hud, camera.drawWieldedTool(); } -void draw_scene(video::IVideoDriver* driver, scene::ISceneManager* smgr, - Camera& camera, Client& client, LocalPlayer* player, Hud& hud, - gui::IGUIEnvironment* guienv, std::vector hilightboxes, - const v2u32& screensize, video::SColor skycolor, bool show_hud) +void draw_scene(video::IVideoDriver *driver, scene::ISceneManager *smgr, + Camera &camera, Client& client, LocalPlayer *player, Hud &hud, + Mapper &mapper, gui::IGUIEnvironment *guienv, + std::vector hilightboxes, const v2u32 &screensize, + video::SColor skycolor, bool show_hud, bool show_minimap) { TimeTaker timer("smgr"); @@ -484,6 +485,8 @@ void draw_scene(video::IVideoDriver* driver, scene::ISceneManager* smgr, hud.drawCrosshair(); hud.drawHotbar(client.getPlayerItem()); hud.drawLuaElements(camera.getOffset()); + if (show_minimap) + mapper.drawMinimap(); } guienv->drawAll(); diff --git a/src/drawscene.h b/src/drawscene.h index a8f09e82..126158c7 100644 --- a/src/drawscene.h +++ b/src/drawscene.h @@ -22,16 +22,18 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "camera.h" #include "hud.h" +#include "minimap.h" #include "irrlichttypes_extrabloated.h" -void draw_load_screen(const std::wstring &text, IrrlichtDevice* device, - gui::IGUIEnvironment* guienv, float dtime=0, int percent=0, - bool clouds=true); +void draw_load_screen(const std::wstring &text, IrrlichtDevice *device, + gui::IGUIEnvironment *guienv, float dtime = 0, int percent = 0, + bool clouds = true); -void draw_scene(video::IVideoDriver* driver, scene::ISceneManager* smgr, - Camera& camera, Client& client, LocalPlayer* player, Hud& hud, - gui::IGUIEnvironment* guienv, std::vector hilightboxes, - const v2u32& screensize, video::SColor skycolor, bool show_hud); +void draw_scene(video::IVideoDriver *driver, scene::ISceneManager *smgr, + Camera &camera, Client &client, LocalPlayer *player, Hud &hud, + Mapper &mapper, gui::IGUIEnvironment *guienv, + std::vector hilightboxes, const v2u32 &screensize, + video::SColor skycolor, bool show_hud, bool show_minimap); #endif /* DRAWSCENE_H_ */ diff --git a/src/dungeongen.cpp b/src/dungeongen.cpp index 7cde8fee..7ffdd1c1 100644 --- a/src/dungeongen.cpp +++ b/src/dungeongen.cpp @@ -38,7 +38,8 @@ NoiseParams nparams_dungeon_density(0.0, 1.0, v3f(2.5, 2.5, 2.5), 0, 2, 1.4, 2.0 /////////////////////////////////////////////////////////////////////////////// -DungeonGen::DungeonGen(Mapgen *mapgen, DungeonParams *dparams) { +DungeonGen::DungeonGen(Mapgen *mapgen, DungeonParams *dparams) +{ this->mg = mapgen; this->vm = mapgen->vm; @@ -55,10 +56,10 @@ DungeonGen::DungeonGen(Mapgen *mapgen, DungeonParams *dparams) { dp.c_stair = mg->ndef->getId("mapgen_stair_cobble"); dp.diagonal_dirs = false; - dp.mossratio = 3.0; - dp.holesize = v3s16(1, 2, 1); - dp.roomsize = v3s16(0,0,0); - dp.notifytype = GENNOTIFY_DUNGEON; + dp.mossratio = 3.0; + dp.holesize = v3s16(1, 2, 1); + dp.roomsize = v3s16(0, 0, 0); + dp.notifytype = GENNOTIFY_DUNGEON; dp.np_rarity = nparams_dungeon_rarity; dp.np_wetness = nparams_dungeon_wetness; @@ -67,7 +68,8 @@ DungeonGen::DungeonGen(Mapgen *mapgen, DungeonParams *dparams) { } -void DungeonGen::generate(u32 bseed, v3s16 nmin, v3s16 nmax) { +void DungeonGen::generate(u32 bseed, v3s16 nmin, v3s16 nmax) +{ //TimeTaker t("gen dungeons"); if (NoisePerlin3D(&dp.np_rarity, nmin.X, nmin.Y, nmin.Z, mg->seed) < 0.2) return; @@ -78,17 +80,14 @@ void DungeonGen::generate(u32 bseed, v3s16 nmin, v3s16 nmax) { // Dungeon generator doesn't modify places which have this set vm->clearFlag(VMANIP_FLAG_DUNGEON_INSIDE | VMANIP_FLAG_DUNGEON_PRESERVE); - bool no_float = !g_settings->getBool("enable_floating_dungeons"); - - // Set all air and water (and optionally ignore) to be untouchable + // Set all air and water to be untouchable // to make dungeons open to caves and open air for (s16 z = nmin.Z; z <= nmax.Z; z++) { for (s16 y = nmin.Y; y <= nmax.Y; y++) { u32 i = vm->m_area.index(nmin.X, y, z); for (s16 x = nmin.X; x <= nmax.X; x++) { content_t c = vm->m_data[i].getContent(); - if (c == CONTENT_AIR || c == dp.c_water - || (no_float && c == CONTENT_IGNORE)) + if (c == CONTENT_AIR || c == dp.c_water) vm->m_flags[i] |= VMANIP_FLAG_DUNGEON_PRESERVE; i++; } @@ -96,7 +95,7 @@ void DungeonGen::generate(u32 bseed, v3s16 nmin, v3s16 nmax) { } // Add it - makeDungeon(v3s16(1,1,1) * MAP_BLOCKSIZE); + makeDungeon(v3s16(1, 1, 1) * MAP_BLOCKSIZE); // Convert some cobble to mossy cobble if (dp.mossratio != 0.0) { @@ -129,34 +128,32 @@ void DungeonGen::makeDungeon(v3s16 start_padding) Find place for first room */ bool fits = false; - for (u32 i = 0; i < 100 && !fits; i++) - { + for (u32 i = 0; i < 100 && !fits; i++) { bool is_large_room = ((random.next() & 3) == 1); roomsize = is_large_room ? - v3s16(random.range(8, 16),random.range(8, 16),random.range(8, 16)) : - v3s16(random.range(4, 8),random.range(4, 6),random.range(4, 8)); + v3s16(random.range(8, 16), random.range(8, 16), random.range(8, 16)) : + v3s16(random.range(4, 8), random.range(4, 6), random.range(4, 8)); roomsize += dp.roomsize; // start_padding is used to disallow starting the generation of // a dungeon in a neighboring generation chunk roomplace = vm->m_area.MinEdge + start_padding + v3s16( - random.range(0,areasize.X-roomsize.X-1-start_padding.X), - random.range(0,areasize.Y-roomsize.Y-1-start_padding.Y), - random.range(0,areasize.Z-roomsize.Z-1-start_padding.Z)); + random.range(0, areasize.X - roomsize.X - start_padding.X), + random.range(0, areasize.Y - roomsize.Y - start_padding.Y), + random.range(0, areasize.Z - roomsize.Z - start_padding.Z)); /* Check that we're not putting the room to an unknown place, otherwise it might end up floating in the air */ fits = true; - for (s16 z = 1; z < roomsize.Z - 1; z++) - for (s16 y = 1; y < roomsize.Y - 1; y++) - for (s16 x = 1; x < roomsize.X - 1; x++) - { + for (s16 z = 0; z < roomsize.Z; z++) + for (s16 y = 0; y < roomsize.Y; y++) + for (s16 x = 0; x < roomsize.X; x++) { v3s16 p = roomplace + v3s16(x, y, z); u32 vi = vm->m_area.index(p); - if ((vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_INSIDE) || - vm->m_data[vi].getContent() == CONTENT_IGNORE) { + if ((vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE) || + vm->m_data[vi].getContent() == CONTENT_IGNORE) { fits = false; break; } @@ -174,8 +171,7 @@ void DungeonGen::makeDungeon(v3s16 start_padding) v3s16 last_room_center = roomplace + v3s16(roomsize.X / 2, 1, roomsize.Z / 2); u32 room_count = random.range(2, 16); - for (u32 i = 0; i < room_count; i++) - { + for (u32 i = 0; i < room_count; i++) { // Make a room to the determined place makeRoom(roomsize, roomplace); @@ -213,7 +209,7 @@ void DungeonGen::makeDungeon(v3s16 start_padding) if (!findPlaceForDoor(doorplace, doordir)) return; - if (random.range(0,1) == 0) + if (random.range(0, 1) == 0) // Make the door makeDoor(doorplace, doordir); else @@ -226,7 +222,7 @@ void DungeonGen::makeDungeon(v3s16 start_padding) makeCorridor(doorplace, doordir, corridor_end, corridor_end_dir); // Find a place for a random sized room - roomsize = v3s16(random.range(4,8),random.range(4,6),random.range(4,8)); + roomsize = v3s16(random.range(4, 8), random.range(4, 6), random.range(4, 8)); roomsize += dp.roomsize; m_pos = corridor_end; @@ -234,7 +230,7 @@ void DungeonGen::makeDungeon(v3s16 start_padding) if (!findPlaceForRoomDoor(roomsize, doorplace, doordir, roomplace)) return; - if (random.range(0,1) == 0) + if (random.range(0, 1) == 0) // Make the door makeDoor(doorplace, doordir); else @@ -252,11 +248,10 @@ void DungeonGen::makeRoom(v3s16 roomsize, v3s16 roomplace) // Make +-X walls for (s16 z = 0; z < roomsize.Z; z++) - for (s16 y = 0; y < roomsize.Y; y++) - { + for (s16 y = 0; y < roomsize.Y; y++) { { v3s16 p = roomplace + v3s16(0, y, z); - if (vm->m_area.contains(p) == false) + if (!vm->m_area.contains(p)) continue; u32 vi = vm->m_area.index(p); if (vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE) @@ -265,7 +260,7 @@ void DungeonGen::makeRoom(v3s16 roomsize, v3s16 roomplace) } { v3s16 p = roomplace + v3s16(roomsize.X - 1, y, z); - if (vm->m_area.contains(p) == false) + if (!vm->m_area.contains(p)) continue; u32 vi = vm->m_area.index(p); if (vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE) @@ -276,11 +271,10 @@ void DungeonGen::makeRoom(v3s16 roomsize, v3s16 roomplace) // Make +-Z walls for (s16 x = 0; x < roomsize.X; x++) - for (s16 y = 0; y < roomsize.Y; y++) - { + for (s16 y = 0; y < roomsize.Y; y++) { { v3s16 p = roomplace + v3s16(x, y, 0); - if (vm->m_area.contains(p) == false) + if (!vm->m_area.contains(p)) continue; u32 vi = vm->m_area.index(p); if (vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE) @@ -289,7 +283,7 @@ void DungeonGen::makeRoom(v3s16 roomsize, v3s16 roomplace) } { v3s16 p = roomplace + v3s16(x, y, roomsize.Z - 1); - if (vm->m_area.contains(p) == false) + if (!vm->m_area.contains(p)) continue; u32 vi = vm->m_area.index(p); if (vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE) @@ -300,11 +294,10 @@ void DungeonGen::makeRoom(v3s16 roomsize, v3s16 roomplace) // Make +-Y walls (floor and ceiling) for (s16 z = 0; z < roomsize.Z; z++) - for (s16 x = 0; x < roomsize.X; x++) - { + for (s16 x = 0; x < roomsize.X; x++) { { v3s16 p = roomplace + v3s16(x, 0, z); - if (vm->m_area.contains(p) == false) + if (!vm->m_area.contains(p)) continue; u32 vi = vm->m_area.index(p); if (vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE) @@ -313,7 +306,7 @@ void DungeonGen::makeRoom(v3s16 roomsize, v3s16 roomplace) } { v3s16 p = roomplace + v3s16(x,roomsize. Y - 1, z); - if (vm->m_area.contains(p) == false) + if (!vm->m_area.contains(p)) continue; u32 vi = vm->m_area.index(p); if (vm->m_flags[vi] & VMANIP_FLAG_DUNGEON_UNTOUCHABLE) @@ -325,41 +318,39 @@ void DungeonGen::makeRoom(v3s16 roomsize, v3s16 roomplace) // Fill with air for (s16 z = 1; z < roomsize.Z - 1; z++) for (s16 y = 1; y < roomsize.Y - 1; y++) - for (s16 x = 1; x < roomsize.X - 1; x++) - { + for (s16 x = 1; x < roomsize.X - 1; x++) { v3s16 p = roomplace + v3s16(x, y, z); - if (vm->m_area.contains(p) == false) + if (!vm->m_area.contains(p)) continue; u32 vi = vm->m_area.index(p); vm->m_flags[vi] |= VMANIP_FLAG_DUNGEON_UNTOUCHABLE; - vm->m_data[vi] = n_air; + vm->m_data[vi] = n_air; } } void DungeonGen::makeFill(v3s16 place, v3s16 size, - u8 avoid_flags, MapNode n, u8 or_flags) + u8 avoid_flags, MapNode n, u8 or_flags) { for (s16 z = 0; z < size.Z; z++) for (s16 y = 0; y < size.Y; y++) - for (s16 x = 0; x < size.X; x++) - { + for (s16 x = 0; x < size.X; x++) { v3s16 p = place + v3s16(x, y, z); - if (vm->m_area.contains(p) == false) + if (!vm->m_area.contains(p)) continue; u32 vi = vm->m_area.index(p); if (vm->m_flags[vi] & avoid_flags) continue; vm->m_flags[vi] |= or_flags; - vm->m_data[vi] = n; + vm->m_data[vi] = n; } } void DungeonGen::makeHole(v3s16 place) { - makeFill(place, dp.holesize, 0, - MapNode(CONTENT_AIR), VMANIP_FLAG_DUNGEON_INSIDE); + makeFill(place, dp.holesize, 0, MapNode(CONTENT_AIR), + VMANIP_FLAG_DUNGEON_INSIDE); } @@ -374,8 +365,8 @@ void DungeonGen::makeDoor(v3s16 doorplace, v3s16 doordir) } -void DungeonGen::makeCorridor(v3s16 doorplace, - v3s16 doordir, v3s16 &result_place, v3s16 &result_dir) +void DungeonGen::makeCorridor(v3s16 doorplace, v3s16 doordir, + v3s16 &result_place, v3s16 &result_dir) { makeHole(doorplace); v3s16 p0 = doorplace; @@ -398,22 +389,26 @@ void DungeonGen::makeCorridor(v3s16 doorplace, if (partcount != 0) p.Y += make_stairs; - if (vm->m_area.contains(p) == true && - vm->m_area.contains(p + v3s16(0, 1, 0)) == true) { + if (vm->m_area.contains(p) && vm->m_area.contains(p + v3s16(0, 1, 0))) { if (make_stairs) { - makeFill(p + v3s16(-1, -1, -1), dp.holesize + v3s16(2, 3, 2), - VMANIP_FLAG_DUNGEON_UNTOUCHABLE, MapNode(dp.c_cobble), 0); + makeFill(p + v3s16(-1, -1, -1), + dp.holesize + v3s16(2, 3, 2), + VMANIP_FLAG_DUNGEON_UNTOUCHABLE, + MapNode(dp.c_cobble), + 0); makeHole(p); makeHole(p - dir); - // TODO: fix stairs code so it works 100% (quite difficult) + // TODO: fix stairs code so it works 100% + // (quite difficult) // exclude stairs from the bottom step // exclude stairs from diagonal steps if (((dir.X ^ dir.Z) & 1) && - (((make_stairs == 1) && i != 0) || - ((make_stairs == -1) && i != length - 1))) { - // rotate face 180 deg if making stairs backwards + (((make_stairs == 1) && i != 0) || + ((make_stairs == -1) && i != length - 1))) { + // rotate face 180 deg if + // making stairs backwards int facedir = dir_to_facedir(dir * make_stairs); u32 vi = vm->m_area.index(p.X - dir.X, p.Y - 1, p.Z - dir.Z); @@ -425,8 +420,11 @@ void DungeonGen::makeCorridor(v3s16 doorplace, vm->m_data[vi] = MapNode(dp.c_stair, 0, facedir); } } else { - makeFill(p + v3s16(-1, -1, -1), dp.holesize + v3s16(2, 2, 2), - VMANIP_FLAG_DUNGEON_UNTOUCHABLE, MapNode(dp.c_cobble), 0); + makeFill(p + v3s16(-1, -1, -1), + dp.holesize + v3s16(2, 2, 2), + VMANIP_FLAG_DUNGEON_UNTOUCHABLE, + MapNode(dp.c_cobble), + 0); makeHole(p); } @@ -446,7 +444,7 @@ void DungeonGen::makeCorridor(v3s16 doorplace, dir = random_turn(random, dir); - partlength = random.range(1,length); + partlength = random.range(1, length); make_stairs = 0; if (random.next() % 2 == 0 && partlength >= 3) @@ -460,20 +458,15 @@ void DungeonGen::makeCorridor(v3s16 doorplace, bool DungeonGen::findPlaceForDoor(v3s16 &result_place, v3s16 &result_dir) { - for (u32 i = 0; i < 100; i++) - { + for (u32 i = 0; i < 100; i++) { v3s16 p = m_pos + m_dir; v3s16 p1 = p + v3s16(0, 1, 0); - if (vm->m_area.contains(p) == false - || vm->m_area.contains(p1) == false - || i % 4 == 0) - { + if (!vm->m_area.contains(p) || !vm->m_area.contains(p1) || i % 4 == 0) { randomizeDir(); continue; } - if (vm->getNodeNoExNoEmerge(p).getContent() == dp.c_cobble - && vm->getNodeNoExNoEmerge(p1).getContent() == dp.c_cobble) - { + if (vm->getNodeNoExNoEmerge(p).getContent() == dp.c_cobble && + vm->getNodeNoExNoEmerge(p1).getContent() == dp.c_cobble) { // Found wall, this is a good place! result_place = p; result_dir = m_dir; @@ -485,19 +478,25 @@ bool DungeonGen::findPlaceForDoor(v3s16 &result_place, v3s16 &result_dir) Determine where to move next */ // Jump one up if the actual space is there - if (vm->getNodeNoExNoEmerge(p+v3s16(0,0,0)).getContent() == dp.c_cobble - && vm->getNodeNoExNoEmerge(p+v3s16(0,1,0)).getContent() == CONTENT_AIR - && vm->getNodeNoExNoEmerge(p+v3s16(0,2,0)).getContent() == CONTENT_AIR) + if (vm->getNodeNoExNoEmerge(p + + v3s16(0, 0, 0)).getContent() == dp.c_cobble && + vm->getNodeNoExNoEmerge(p + + v3s16(0, 1, 0)).getContent() == CONTENT_AIR && + vm->getNodeNoExNoEmerge(p + + v3s16(0, 2, 0)).getContent() == CONTENT_AIR) p += v3s16(0,1,0); // Jump one down if the actual space is there - if (vm->getNodeNoExNoEmerge(p+v3s16(0,1,0)).getContent() == dp.c_cobble - && vm->getNodeNoExNoEmerge(p+v3s16(0,0,0)).getContent() == CONTENT_AIR - && vm->getNodeNoExNoEmerge(p+v3s16(0,-1,0)).getContent() == CONTENT_AIR) - p += v3s16(0,-1,0); + if (vm->getNodeNoExNoEmerge(p + + v3s16(0, 1, 0)).getContent() == dp.c_cobble && + vm->getNodeNoExNoEmerge(p + + v3s16(0, 0, 0)).getContent() == CONTENT_AIR && + vm->getNodeNoExNoEmerge(p + + v3s16(0, -1, 0)).getContent() == CONTENT_AIR) + p += v3s16(0, -1, 0); // Check if walking is now possible - if (vm->getNodeNoExNoEmerge(p).getContent() != CONTENT_AIR - || vm->getNodeNoExNoEmerge(p+v3s16(0,1,0)).getContent() != CONTENT_AIR) - { + if (vm->getNodeNoExNoEmerge(p).getContent() != CONTENT_AIR || + vm->getNodeNoExNoEmerge(p + + v3s16(0, 1, 0)).getContent() != CONTENT_AIR) { // Cannot continue walking here randomizeDir(); continue; @@ -510,10 +509,9 @@ bool DungeonGen::findPlaceForDoor(v3s16 &result_place, v3s16 &result_dir) bool DungeonGen::findPlaceForRoomDoor(v3s16 roomsize, v3s16 &result_doorplace, - v3s16 &result_doordir, v3s16 &result_roomplace) + v3s16 &result_doordir, v3s16 &result_roomplace) { - for (s16 trycount = 0; trycount < 30; trycount++) - { + for (s16 trycount = 0; trycount < 30; trycount++) { v3s16 doorplace; v3s16 doordir; bool r = findPlaceForDoor(doorplace, doordir); @@ -524,16 +522,16 @@ bool DungeonGen::findPlaceForRoomDoor(v3s16 roomsize, v3s16 &result_doorplace, #if 1 if (doordir == v3s16(1, 0, 0)) // X+ roomplace = doorplace + - v3s16(0, -1, random.range(-roomsize.Z + 2, -2)); + v3s16(0, -1, random.range(-roomsize.Z + 2, -2)); if (doordir == v3s16(-1, 0, 0)) // X- roomplace = doorplace + - v3s16(-roomsize.X + 1, -1, random.range(-roomsize.Z + 2, -2)); + v3s16(-roomsize.X + 1, -1, random.range(-roomsize.Z + 2, -2)); if (doordir == v3s16(0, 0, 1)) // Z+ roomplace = doorplace + - v3s16(random.range(-roomsize.X + 2, -2), -1, 0); + v3s16(random.range(-roomsize.X + 2, -2), -1, 0); if (doordir == v3s16(0, 0, -1)) // Z- roomplace = doorplace + - v3s16(random.range(-roomsize.X + 2, -2), -1, -roomsize.Z + 1); + v3s16(random.range(-roomsize.X + 2, -2), -1, -roomsize.Z + 1); #endif #if 0 if (doordir == v3s16(1, 0, 0)) // X+ @@ -550,23 +548,18 @@ bool DungeonGen::findPlaceForRoomDoor(v3s16 roomsize, v3s16 &result_doorplace, bool fits = true; for (s16 z = 1; z < roomsize.Z - 1; z++) for (s16 y = 1; y < roomsize.Y - 1; y++) - for (s16 x = 1; x < roomsize.X - 1; x++) - { + for (s16 x = 1; x < roomsize.X - 1; x++) { v3s16 p = roomplace + v3s16(x, y, z); - if (vm->m_area.contains(p) == false) - { + if (!vm->m_area.contains(p)) { fits = false; break; } - if (vm->m_flags[vm->m_area.index(p)] - & VMANIP_FLAG_DUNGEON_INSIDE) - { + if (vm->m_flags[vm->m_area.index(p)] & VMANIP_FLAG_DUNGEON_INSIDE) { fits = false; break; } } - if(fits == false) - { + if (fits == false) { // Find new place continue; } @@ -604,15 +597,12 @@ v3s16 rand_ortho_dir(PseudoRandom &random, bool diagonal_dirs) v3s16 turn_xz(v3s16 olddir, int t) { v3s16 dir; - if (t == 0) - { + if (t == 0) { // Turn right dir.X = olddir.Z; dir.Z = -olddir.X; dir.Y = olddir.Y; - } - else - { + } else { // Turn left dir.X = -olddir.Z; dir.Z = olddir.X; @@ -627,10 +617,8 @@ v3s16 random_turn(PseudoRandom &random, v3s16 olddir) int turn = random.range(0, 2); v3s16 dir; if (turn == 0) - { // Go straight dir = olddir; - } else if (turn == 1) // Turn right dir = turn_xz(olddir, 0); @@ -641,7 +629,8 @@ v3s16 random_turn(PseudoRandom &random, v3s16 olddir) } -int dir_to_facedir(v3s16 d) { +int dir_to_facedir(v3s16 d) +{ if (abs(d.X) > abs(d.Z)) return d.X < 0 ? 3 : 1; else diff --git a/src/emerge.cpp b/src/emerge.cpp index 708cfc65..40ccde59 100644 --- a/src/emerge.cpp +++ b/src/emerge.cpp @@ -20,77 +20,98 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "emerge.h" -#include "server.h" + #include #include -#include "jthread/jevent.h" -#include "map.h" -#include "environment.h" + #include "util/container.h" #include "util/thread.h" -#include "constants.h" -#include "voxel.h" +#include "threading/event.h" + #include "config.h" -#include "mapblock.h" -#include "serverobject.h" -#include "settings.h" -#include "scripting_game.h" -#include "profiler.h" +#include "constants.h" +#include "environment.h" #include "log.h" -#include "nodedef.h" -#include "mg_biome.h" -#include "mg_ore.h" -#include "mg_decoration.h" -#include "mg_schematic.h" +#include "map.h" +#include "mapblock.h" +#include "mapgen_fractal.h" #include "mapgen_v5.h" #include "mapgen_v6.h" #include "mapgen_v7.h" #include "mapgen_singlenode.h" +#include "mg_biome.h" +#include "mg_ore.h" +#include "mg_decoration.h" +#include "mg_schematic.h" +#include "nodedef.h" +#include "profiler.h" +#include "scripting_game.h" +#include "server.h" +#include "serverobject.h" +#include "settings.h" +#include "voxel.h" + struct MapgenDesc { const char *name; MapgenFactory *factory; + bool is_user_visible; }; -MapgenDesc reg_mapgens[] = { - {"v5", new MapgenFactoryV5}, - {"v6", new MapgenFactoryV6}, - {"v7", new MapgenFactoryV7}, - {"singlenode", new MapgenFactorySinglenode}, -}; - -class EmergeThread : public JThread -{ +class EmergeThread : public Thread { public: - Server *m_server; - ServerMap *map; - EmergeManager *emerge; - Mapgen *mapgen; bool enable_mapgen_debug_info; int id; - Event qevent; - std::queue blockqueue; + EmergeThread(Server *server, int ethreadid); + ~EmergeThread(); - EmergeThread(Server *server, int ethreadid): - JThread(), - m_server(server), - map(NULL), - emerge(NULL), - mapgen(NULL), - enable_mapgen_debug_info(false), - id(ethreadid) - { - } + void *run(); + void signal(); - void *Thread(); - bool popBlockEmerge(v3s16 *pos, u8 *flags); - bool getBlockOrStartGen(v3s16 p, MapBlock **b, - BlockMakeData *data, bool allow_generate); + // Requires queue mutex held + bool pushBlock(v3s16 pos); + + void cancelPendingItems(); + + static void runCompletionCallbacks( + v3s16 pos, EmergeAction action, + const EmergeCallbackList &callbacks); + +private: + Server *m_server; + ServerMap *m_map; + EmergeManager *m_emerge; + Mapgen *m_mapgen; + + Event m_queue_event; + std::queue m_block_queue; + + bool popBlockEmerge(v3s16 *pos, BlockEmergeData *bedata); + + EmergeAction getBlockOrStartGen( + v3s16 pos, bool allow_gen, MapBlock **block, BlockMakeData *data); + MapBlock *finishGen(v3s16 pos, BlockMakeData *bmdata, + std::map *modified_blocks); + + friend class EmergeManager; }; +//// +//// Built-in mapgens +//// -/////////////////////////////// Emerge Manager //////////////////////////////// +MapgenDesc g_reg_mapgens[] = { + {"v5", new MapgenFactoryV5, true}, + {"v6", new MapgenFactoryV6, true}, + {"v7", new MapgenFactoryV7, true}, + {"fractal", new MapgenFactoryFractal, false}, + {"singlenode", new MapgenFactorySinglenode, false}, +}; + +//// +//// EmergeManager +//// EmergeManager::EmergeManager(IGameDef *gamedef) { @@ -104,34 +125,34 @@ EmergeManager::EmergeManager(IGameDef *gamedef) // Note that accesses to this variable are not synchronized. // This is because the *only* thread ever starting or stopping // EmergeThreads should be the ServerThread. - this->threads_active = false; + this->m_threads_active = false; - mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info"); + enable_mapgen_debug_info = g_settings->getBool("enable_mapgen_debug_info"); - // if unspecified, leave a proc for the main thread and one for + // If unspecified, leave a proc for the main thread and one for // some other misc thread s16 nthreads = 0; if (!g_settings->getS16NoEx("num_emerge_threads", nthreads)) - nthreads = porting::getNumberOfProcessors() - 2; + nthreads = Thread::getNumberOfProcessors() - 2; if (nthreads < 1) nthreads = 1; - qlimit_total = g_settings->getU16("emergequeue_limit_total"); - if (!g_settings->getU16NoEx("emergequeue_limit_diskonly", qlimit_diskonly)) - qlimit_diskonly = nthreads * 5 + 1; - if (!g_settings->getU16NoEx("emergequeue_limit_generate", qlimit_generate)) - qlimit_generate = nthreads + 1; + m_qlimit_total = g_settings->getU16("emergequeue_limit_total"); + if (!g_settings->getU16NoEx("emergequeue_limit_diskonly", m_qlimit_diskonly)) + m_qlimit_diskonly = nthreads * 5 + 1; + if (!g_settings->getU16NoEx("emergequeue_limit_generate", m_qlimit_generate)) + m_qlimit_generate = nthreads + 1; // don't trust user input for something very important like this - if (qlimit_total < 1) - qlimit_total = 1; - if (qlimit_diskonly < 1) - qlimit_diskonly = 1; - if (qlimit_generate < 1) - qlimit_generate = 1; + if (m_qlimit_total < 1) + m_qlimit_total = 1; + if (m_qlimit_diskonly < 1) + m_qlimit_diskonly = 1; + if (m_qlimit_generate < 1) + m_qlimit_generate = 1; for (s16 i = 0; i < nthreads; i++) - emergethread.push_back(new EmergeThread((Server *) gamedef, i)); + m_threads.push_back(new EmergeThread((Server *)gamedef, i)); infostream << "EmergeManager: using " << nthreads << " threads" << std::endl; } @@ -139,27 +160,25 @@ EmergeManager::EmergeManager(IGameDef *gamedef) EmergeManager::~EmergeManager() { - for (u32 i = 0; i != emergethread.size(); i++) { - if (threads_active) { - emergethread[i]->Stop(); - emergethread[i]->qevent.signal(); - emergethread[i]->Wait(); + for (u32 i = 0; i != m_threads.size(); i++) { + EmergeThread *thread = m_threads[i]; + + if (m_threads_active) { + thread->stop(); + thread->signal(); + thread->wait(); } - delete emergethread[i]; - delete mapgen[i]; + + delete thread; + delete m_mapgens[i]; } - emergethread.clear(); - mapgen.clear(); delete biomemgr; delete oremgr; delete decomgr; delete schemmgr; - if (params.sparams) { - delete params.sparams; - params.sparams = NULL; - } + delete params.sparams; } @@ -171,33 +190,37 @@ void EmergeManager::loadMapgenParams() void EmergeManager::initMapgens() { - if (mapgen.size()) + if (m_mapgens.size()) return; + MapgenFactory *mgfactory = getMapgenFactory(params.mg_name); + if (!mgfactory) { + errorstream << "EmergeManager: mapgen " << params.mg_name << + " not registered; falling back to " << DEFAULT_MAPGEN << std::endl; + + params.mg_name = DEFAULT_MAPGEN; + + mgfactory = getMapgenFactory(params.mg_name); + FATAL_ERROR_IF(mgfactory == NULL, "Couldn't use any mapgen!"); + } + if (!params.sparams) { - params.sparams = createMapgenParams(params.mg_name); - if (!params.sparams) { - params.mg_name = DEFAULT_MAPGEN; - params.sparams = createMapgenParams(params.mg_name); - assert(params.sparams); - } + params.sparams = mgfactory->createMapgenParams(); params.sparams->readParams(g_settings); } - // Create the mapgens - for (u32 i = 0; i != emergethread.size(); i++) { - Mapgen *mg = createMapgen(params.mg_name, i, ¶ms); - assert(mg); - mapgen.push_back(mg); + for (u32 i = 0; i != m_threads.size(); i++) { + Mapgen *mg = mgfactory->createMapgen(i, ¶ms, this); + m_mapgens.push_back(mg); } } Mapgen *EmergeManager::getCurrentMapgen() { - for (u32 i = 0; i != emergethread.size(); i++) { - if (emergethread[i]->IsSameThread()) - return emergethread[i]->mapgen; + for (u32 i = 0; i != m_threads.size(); i++) { + if (m_threads[i]->isCurrentThread()) + return m_threads[i]->m_mapgen; } return NULL; @@ -206,329 +229,469 @@ Mapgen *EmergeManager::getCurrentMapgen() void EmergeManager::startThreads() { - if (threads_active) + if (m_threads_active) return; - for (u32 i = 0; i != emergethread.size(); i++) - emergethread[i]->Start(); + for (u32 i = 0; i != m_threads.size(); i++) + m_threads[i]->start(); - threads_active = true; + m_threads_active = true; } void EmergeManager::stopThreads() { - if (!threads_active) + if (!m_threads_active) return; // Request thread stop in parallel - for (u32 i = 0; i != emergethread.size(); i++) { - emergethread[i]->Stop(); - emergethread[i]->qevent.signal(); + for (u32 i = 0; i != m_threads.size(); i++) { + m_threads[i]->stop(); + m_threads[i]->signal(); } // Then do the waiting for each - for (u32 i = 0; i != emergethread.size(); i++) - emergethread[i]->Wait(); + for (u32 i = 0; i != m_threads.size(); i++) + m_threads[i]->wait(); - threads_active = false; + m_threads_active = false; } -bool EmergeManager::enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate) +bool EmergeManager::isRunning() { - std::map::const_iterator iter; - BlockEmergeData *bedata; - u16 count; - u8 flags = 0; - int idx = 0; + return m_threads_active; +} + +bool EmergeManager::enqueueBlockEmerge( + u16 peer_id, + v3s16 blockpos, + bool allow_generate, + bool ignore_queue_limits) +{ + u16 flags = 0; if (allow_generate) - flags |= BLOCK_EMERGE_ALLOWGEN; + flags |= BLOCK_EMERGE_ALLOW_GEN; + if (ignore_queue_limits) + flags |= BLOCK_EMERGE_FORCE_QUEUE; + + return enqueueBlockEmergeEx(blockpos, peer_id, flags, NULL, NULL); +} + + +bool EmergeManager::enqueueBlockEmergeEx( + v3s16 blockpos, + u16 peer_id, + u16 flags, + EmergeCompletionCallback callback, + void *callback_param) +{ + EmergeThread *thread = NULL; { - JMutexAutoLock queuelock(queuemutex); + MutexAutoLock queuelock(m_queue_mutex); - count = blocks_enqueued.size(); - if (count >= qlimit_total) + if (!pushBlockEmergeData(blockpos, peer_id, flags, + callback, callback_param)) return false; - count = peer_queue_count[peer_id]; - u16 qlimit_peer = allow_generate ? qlimit_generate : qlimit_diskonly; - if (count >= qlimit_peer) - return false; - - iter = blocks_enqueued.find(p); - if (iter != blocks_enqueued.end()) { - bedata = iter->second; - bedata->flags |= flags; - return true; - } - - bedata = new BlockEmergeData; - bedata->flags = flags; - bedata->peer_requested = peer_id; - blocks_enqueued.insert(std::make_pair(p, bedata)); - - peer_queue_count[peer_id] = count + 1; - - // insert into the EmergeThread queue with the least items - int lowestitems = emergethread[0]->blockqueue.size(); - for (u32 i = 1; i != emergethread.size(); i++) { - int nitems = emergethread[i]->blockqueue.size(); - if (nitems < lowestitems) { - idx = i; - lowestitems = nitems; - } - } - - emergethread[idx]->blockqueue.push(p); + thread = getOptimalThread(); + thread->pushBlock(blockpos); } - emergethread[idx]->qevent.signal(); + + thread->signal(); return true; } +// +// Mapgen-related helper functions +// + +v3s16 EmergeManager::getContainingChunk(v3s16 blockpos) +{ + return getContainingChunk(blockpos, params.chunksize); +} + + +v3s16 EmergeManager::getContainingChunk(v3s16 blockpos, s16 chunksize) +{ + s16 coff = -chunksize / 2; + v3s16 chunk_offset(coff, coff, coff); + + return getContainerPos(blockpos - chunk_offset, chunksize) + * chunksize + chunk_offset; +} + + int EmergeManager::getGroundLevelAtPoint(v2s16 p) { - if (mapgen.size() == 0 || !mapgen[0]) { + if (m_mapgens.size() == 0 || !m_mapgens[0]) { errorstream << "EmergeManager: getGroundLevelAtPoint() called" - " before mapgen initialized" << std::endl; + " before mapgen init" << std::endl; return 0; } - return mapgen[0]->getGroundLevelAtPoint(p); + return m_mapgens[0]->getGroundLevelAtPoint(p); } bool EmergeManager::isBlockUnderground(v3s16 blockpos) { - /* +#if 0 v2s16 p = v2s16((blockpos.X * MAP_BLOCKSIZE) + MAP_BLOCKSIZE / 2, (blockpos.Y * MAP_BLOCKSIZE) + MAP_BLOCKSIZE / 2); int ground_level = getGroundLevelAtPoint(p); return blockpos.Y * (MAP_BLOCKSIZE + 1) <= min(water_level, ground_level); - */ +#endif - //yuck, but then again, should i bother being accurate? - //the height of the nodes in a single block is quite variable + // Use a simple heuristic; the above method is wildly inaccurate anyway. return blockpos.Y * (MAP_BLOCKSIZE + 1) <= params.water_level; } -void EmergeManager::getMapgenNames(std::list &mgnames) +void EmergeManager::getMapgenNames( + std::vector *mgnames, bool include_hidden) { - for (u32 i = 0; i != ARRLEN(reg_mapgens); i++) - mgnames.push_back(reg_mapgens[i].name); + for (u32 i = 0; i != ARRLEN(g_reg_mapgens); i++) { + if (include_hidden || g_reg_mapgens[i].is_user_visible) + mgnames->push_back(g_reg_mapgens[i].name); + } } -Mapgen *EmergeManager::createMapgen(const std::string &mgname, int mgid, - MapgenParams *mgparams) +MapgenFactory *EmergeManager::getMapgenFactory(const std::string &mgname) { - u32 i; - for (i = 0; i != ARRLEN(reg_mapgens) && mgname != reg_mapgens[i].name; i++); - if (i == ARRLEN(reg_mapgens)) { - errorstream << "EmergeManager; mapgen " << mgname << - " not registered" << std::endl; - return NULL; + for (u32 i = 0; i != ARRLEN(g_reg_mapgens); i++) { + if (mgname == g_reg_mapgens[i].name) + return g_reg_mapgens[i].factory; } - MapgenFactory *mgfactory = reg_mapgens[i].factory; - return mgfactory->createMapgen(mgid, mgparams, this); + return NULL; } -MapgenSpecificParams *EmergeManager::createMapgenParams(const std::string &mgname) +bool EmergeManager::pushBlockEmergeData( + v3s16 pos, + u16 peer_requested, + u16 flags, + EmergeCompletionCallback callback, + void *callback_param) { - u32 i; - for (i = 0; i < ARRLEN(reg_mapgens) && mgname != reg_mapgens[i].name; i++); - if (i == ARRLEN(reg_mapgens)) { - errorstream << "EmergeManager: Mapgen " << mgname << - " not registered" << std::endl; - return NULL; + u16 &count_peer = m_peer_queue_count[peer_requested]; + + if ((flags & BLOCK_EMERGE_FORCE_QUEUE) == 0) { + if (m_blocks_enqueued.size() >= m_qlimit_total) + return false; + + if (peer_requested != PEER_ID_INEXISTENT) { + u16 qlimit_peer = (flags & BLOCK_EMERGE_ALLOW_GEN) ? + m_qlimit_generate : m_qlimit_diskonly; + if (count_peer >= qlimit_peer) + return false; + } } - MapgenFactory *mgfactory = reg_mapgens[i].factory; - return mgfactory->createMapgenParams(); -} + std::pair::iterator, bool> findres; + findres = m_blocks_enqueued.insert(std::make_pair(pos, BlockEmergeData())); + BlockEmergeData &bedata = findres.first->second; + bool update_existing = !findres.second; -////////////////////////////// Emerge Thread ////////////////////////////////// + if (callback) + bedata.callbacks.push_back(std::make_pair(callback, callback_param)); -bool EmergeThread::popBlockEmerge(v3s16 *pos, u8 *flags) -{ - std::map::iterator iter; - JMutexAutoLock queuelock(emerge->queuemutex); + if (update_existing) { + bedata.flags |= flags; + } else { + bedata.flags = flags; + bedata.peer_requested = peer_requested; - if (blockqueue.empty()) - return false; - v3s16 p = blockqueue.front(); - blockqueue.pop(); - - *pos = p; - - iter = emerge->blocks_enqueued.find(p); - if (iter == emerge->blocks_enqueued.end()) - return false; //uh oh, queue and map out of sync!! - - BlockEmergeData *bedata = iter->second; - *flags = bedata->flags; - - emerge->peer_queue_count[bedata->peer_requested]--; - - delete bedata; - emerge->blocks_enqueued.erase(iter); + count_peer++; + } return true; } -bool EmergeThread::getBlockOrStartGen(v3s16 p, MapBlock **b, - BlockMakeData *data, bool allow_gen) +bool EmergeManager::popBlockEmergeData( + v3s16 pos, + BlockEmergeData *bedata) { - v2s16 p2d(p.X, p.Z); - //envlock: usually takes <=1ms, sometimes 90ms or ~400ms to acquire - JMutexAutoLock envlock(m_server->m_env_mutex); + std::map::iterator it; + std::map::iterator it2; - // Load sector if it isn't loaded - if (map->getSectorNoGenerateNoEx(p2d) == NULL) - map->loadSectorMeta(p2d); + it = m_blocks_enqueued.find(pos); + if (it == m_blocks_enqueued.end()) + return false; - // Attempt to load block - MapBlock *block = map->getBlockNoCreateNoEx(p); - if (!block || block->isDummy() || !block->isGenerated()) { - EMERGE_DBG_OUT("not in memory, attempting to load from disk"); - block = map->loadBlock(p); - if (block && block->isGenerated()) - map->prepareBlock(block); - } + *bedata = it->second; - // If could not load and allowed to generate, - // start generation inside this same envlock - if (allow_gen && (block == NULL || !block->isGenerated())) { - EMERGE_DBG_OUT("generating"); - *b = block; - return map->initBlockMake(data, p); - } + it2 = m_peer_queue_count.find(bedata->peer_requested); + if (it2 == m_peer_queue_count.end()) + return false; - *b = block; - return false; + u16 &count_peer = it2->second; + assert(count_peer != 0); + count_peer--; + + m_blocks_enqueued.erase(it); + + return true; } -void *EmergeThread::Thread() +EmergeThread *EmergeManager::getOptimalThread() { - ThreadStarted(); - log_register_thread("EmergeThread" + itos(id)); - DSTACK(__FUNCTION_NAME); + size_t nthreads = m_threads.size(); + + FATAL_ERROR_IF(nthreads == 0, "No emerge threads!"); + + size_t index = 0; + size_t nitems_lowest = m_threads[0]->m_block_queue.size(); + + for (size_t i = 1; i < nthreads; i++) { + size_t nitems = m_threads[i]->m_block_queue.size(); + if (nitems < nitems_lowest) { + index = i; + nitems_lowest = nitems; + } + } + + return m_threads[index]; +} + + +//// +//// EmergeThread +//// + +EmergeThread::EmergeThread(Server *server, int ethreadid) : + enable_mapgen_debug_info(false), + id(ethreadid), + m_server(server), + m_map(NULL), + m_emerge(NULL), + m_mapgen(NULL) +{ + m_name = "Emerge-" + itos(ethreadid); +} + + +EmergeThread::~EmergeThread() +{ + //cancelPendingItems(); +} + + +void EmergeThread::signal() +{ + m_queue_event.signal(); +} + + +bool EmergeThread::pushBlock(v3s16 pos) +{ + m_block_queue.push(pos); + return true; +} + + +void EmergeThread::cancelPendingItems() +{ + MutexAutoLock queuelock(m_emerge->m_queue_mutex); + + while (!m_block_queue.empty()) { + BlockEmergeData bedata; + v3s16 pos; + + pos = m_block_queue.front(); + m_block_queue.pop(); + + m_emerge->popBlockEmergeData(pos, &bedata); + + runCompletionCallbacks(pos, EMERGE_CANCELLED, bedata.callbacks); + } +} + + +void EmergeThread::runCompletionCallbacks( + v3s16 pos, + EmergeAction action, + const EmergeCallbackList &callbacks) +{ + for (size_t i = 0; i != callbacks.size(); i++) { + EmergeCompletionCallback callback; + void *param; + + callback = callbacks[i].first; + param = callbacks[i].second; + + callback(pos, action, param); + } +} + + +bool EmergeThread::popBlockEmerge(v3s16 *pos, BlockEmergeData *bedata) +{ + MutexAutoLock queuelock(m_emerge->m_queue_mutex); + + if (m_block_queue.empty()) + return false; + + *pos = m_block_queue.front(); + m_block_queue.pop(); + + m_emerge->popBlockEmergeData(*pos, bedata); + + return true; +} + + +EmergeAction EmergeThread::getBlockOrStartGen( + v3s16 pos, bool allow_gen, MapBlock **block, BlockMakeData *bmdata) +{ + MutexAutoLock envlock(m_server->m_env_mutex); + + // 1). Attempt to fetch block from memory + *block = m_map->getBlockNoCreateNoEx(pos); + if (*block && !(*block)->isDummy() && (*block)->isGenerated()) + return EMERGE_FROM_MEMORY; + + // 2). Attempt to load block from disk + *block = m_map->loadBlock(pos); + if (*block && (*block)->isGenerated()) + return EMERGE_FROM_DISK; + + // 3). Attempt to start generation + if (allow_gen && m_map->initBlockMake(pos, bmdata)) + return EMERGE_GENERATED; + + // All attempts failed; cancel this block emerge + return EMERGE_CANCELLED; +} + + +MapBlock *EmergeThread::finishGen(v3s16 pos, BlockMakeData *bmdata, + std::map *modified_blocks) +{ + MutexAutoLock envlock(m_server->m_env_mutex); + ScopeProfiler sp(g_profiler, + "EmergeThread: after Mapgen::makeChunk", SPT_AVG); + + /* + Perform post-processing on blocks (invalidate lighting, queue liquid + transforms, etc.) to finish block make + */ + m_map->finishBlockMake(bmdata, modified_blocks); + + MapBlock *block = m_map->getBlockNoCreateNoEx(pos); + if (!block) { + errorstream << "EmergeThread::finishGen: Couldn't grab block we " + "just generated: " << PP(pos) << std::endl; + return NULL; + } + + v3s16 minp = bmdata->blockpos_min * MAP_BLOCKSIZE; + v3s16 maxp = bmdata->blockpos_max * MAP_BLOCKSIZE + + v3s16(1,1,1) * (MAP_BLOCKSIZE - 1); + + // Ignore map edit events, they will not need to be sent + // to anybody because the block hasn't been sent to anybody + MapEditEventAreaIgnorer ign( + &m_server->m_ignore_map_edit_events_area, + VoxelArea(minp, maxp)); + + /* + Run Lua on_generated callbacks + */ + try { + m_server->getScriptIface()->environment_OnGenerated( + minp, maxp, m_mapgen->blockseed); + } catch (LuaError &e) { + m_server->setAsyncFatalError("Lua: " + std::string(e.what())); + } + + EMERGE_DBG_OUT("ended up with: " << analyze_block(block)); + + /* + Activate the block + */ + m_server->m_env->activateBlock(block, 0); + + return block; +} + + +void *EmergeThread::run() +{ + DSTACK(FUNCTION_NAME); BEGIN_DEBUG_EXCEPTION_HANDLER - v3s16 last_tried_pos(-32768,-32768,-32768); // For error output - v3s16 p; - u8 flags = 0; + v3s16 pos; - map = (ServerMap *)&(m_server->m_env->getMap()); - emerge = m_server->m_emerge; - mapgen = emerge->mapgen[id]; - enable_mapgen_debug_info = emerge->mapgen_debug_info; + m_map = (ServerMap *)&(m_server->m_env->getMap()); + m_emerge = m_server->m_emerge; + m_mapgen = m_emerge->m_mapgens[id]; + enable_mapgen_debug_info = m_emerge->enable_mapgen_debug_info; - porting::setThreadName("EmergeThread"); - - while (!StopRequested()) try { - if (!popBlockEmerge(&p, &flags)) { - qevent.wait(); + while (!stopRequested()) { + std::map modified_blocks; + BlockEmergeData bedata; + BlockMakeData bmdata; + EmergeAction action; + MapBlock *block; + + if (!popBlockEmerge(&pos, &bedata)) { + m_queue_event.wait(); continue; } - last_tried_pos = p; - if (blockpos_over_limit(p)) + if (blockpos_over_limit(pos)) continue; - bool allow_generate = flags & BLOCK_EMERGE_ALLOWGEN; - EMERGE_DBG_OUT("p=" PP(p) " allow_generate=" << allow_generate); + bool allow_gen = bedata.flags & BLOCK_EMERGE_ALLOW_GEN; + EMERGE_DBG_OUT("pos=" PP(pos) " allow_gen=" << allow_gen); - /* - Try to fetch block from memory or disk. - If not found and asked to generate, initialize generator. - */ - BlockMakeData data; - MapBlock *block = NULL; - std::map modified_blocks; - - if (getBlockOrStartGen(p, &block, &data, allow_generate) && mapgen) { + action = getBlockOrStartGen(pos, allow_gen, &block, &bmdata); + if (action == EMERGE_GENERATED) { { - ScopeProfiler sp(g_profiler, "EmergeThread: Mapgen::makeChunk", SPT_AVG); + ScopeProfiler sp(g_profiler, + "EmergeThread: Mapgen::makeChunk", SPT_AVG); TimeTaker t("mapgen::make_block()"); - mapgen->makeChunk(&data); + m_mapgen->makeChunk(&bmdata); if (enable_mapgen_debug_info == false) t.stop(true); // Hide output } - { - //envlock: usually 0ms, but can take either 30 or 400ms to acquire - JMutexAutoLock envlock(m_server->m_env_mutex); - ScopeProfiler sp(g_profiler, "EmergeThread: after " - "Mapgen::makeChunk (envlock)", SPT_AVG); - - map->finishBlockMake(&data, modified_blocks); - - block = map->getBlockNoCreateNoEx(p); - if (block) { - /* - Do some post-generate stuff - */ - v3s16 minp = data.blockpos_min * MAP_BLOCKSIZE; - v3s16 maxp = data.blockpos_max * MAP_BLOCKSIZE + - v3s16(1,1,1) * (MAP_BLOCKSIZE - 1); - - // Ignore map edit events, they will not need to be sent - // to anybody because the block hasn't been sent to anybody - MapEditEventAreaIgnorer - ign(&m_server->m_ignore_map_edit_events_area, - VoxelArea(minp, maxp)); - try { // takes about 90ms with -O1 on an e3-1230v2 - m_server->getScriptIface()->environment_OnGenerated( - minp, maxp, mapgen->blockseed); - } catch(LuaError &e) { - m_server->setAsyncFatalError(e.what()); - } - - EMERGE_DBG_OUT("ended up with: " << analyze_block(block)); - - m_server->m_env->activateBlock(block, 0); - } - } + block = finishGen(pos, &bmdata, &modified_blocks); } - /* - Set sent status of modified blocks on clients - */ - // Add the originally fetched block to the modified list + runCompletionCallbacks(pos, action, bedata.callbacks); + if (block) - modified_blocks[p] = block; + modified_blocks[pos] = block; - if (modified_blocks.size() > 0) { + if (modified_blocks.size() > 0) m_server->SetBlocksNotSent(modified_blocks); - } } - catch (VersionMismatchException &e) { + } catch (VersionMismatchException &e) { std::ostringstream err; - err << "World data version mismatch in MapBlock " << PP(last_tried_pos) << std::endl + err << "World data version mismatch in MapBlock " << PP(pos) << std::endl << "----" << std::endl << "\"" << e.what() << "\"" << std::endl << "See debug.txt." << std::endl << "World probably saved by a newer version of " PROJECT_NAME_C "." << std::endl; m_server->setAsyncFatalError(err.str()); - } - catch (SerializationError &e) { + } catch (SerializationError &e) { std::ostringstream err; - err << "Invalid data in MapBlock " << PP(last_tried_pos) << std::endl + err << "Invalid data in MapBlock " << PP(pos) << std::endl << "----" << std::endl << "\"" << e.what() << "\"" << std::endl << "See debug.txt." << std::endl @@ -537,24 +700,6 @@ void *EmergeThread::Thread() m_server->setAsyncFatalError(err.str()); } - { - JMutexAutoLock queuelock(emerge->queuemutex); - while (!blockqueue.empty()) - { - v3s16 p = blockqueue.front(); - blockqueue.pop(); - - std::map::iterator iter; - iter = emerge->blocks_enqueued.find(p); - if (iter == emerge->blocks_enqueued.end()) - continue; //uh oh, queue and map out of sync!! - - BlockEmergeData *bedata = iter->second; - delete bedata; - } - } - - END_DEBUG_EXCEPTION_HANDLER(errorstream) - log_deregister_thread(); + END_DEBUG_EXCEPTION_HANDLER return NULL; } diff --git a/src/emerge.h b/src/emerge.h index f8603c3c..b476239a 100644 --- a/src/emerge.h +++ b/src/emerge.h @@ -26,13 +26,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapgen.h" // for MapgenParams #include "map.h" -#define BLOCK_EMERGE_ALLOWGEN (1<<0) +#define BLOCK_EMERGE_ALLOW_GEN (1 << 0) +#define BLOCK_EMERGE_FORCE_QUEUE (1 << 1) -#define EMERGE_DBG_OUT(x) \ - do { \ - if (enable_mapgen_debug_info) \ - infostream << "EmergeThread: " x << std::endl; \ - } while (0) +#define EMERGE_DBG_OUT(x) do { \ + if (enable_mapgen_debug_info) \ + infostream << "EmergeThread: " x << std::endl; \ +} while (0) class EmergeThread; class INodeDefManager; @@ -43,6 +43,7 @@ class OreManager; class DecorationManager; class SchematicManager; +// Structure containing inputs/outputs for chunk generation struct BlockMakeData { MMVManip *vmanip; u64 seed; @@ -61,60 +62,110 @@ struct BlockMakeData { ~BlockMakeData() { delete vmanip; } }; +// Result from processing an item on the emerge queue +enum EmergeAction { + EMERGE_CANCELLED, + EMERGE_ERRORED, + EMERGE_FROM_MEMORY, + EMERGE_FROM_DISK, + EMERGE_GENERATED, +}; + +// Callback +typedef void (*EmergeCompletionCallback)( + v3s16 blockpos, EmergeAction action, void *param); + +typedef std::vector< + std::pair< + EmergeCompletionCallback, + void * + > +> EmergeCallbackList; + struct BlockEmergeData { u16 peer_requested; - u8 flags; + u16 flags; + EmergeCallbackList callbacks; }; class EmergeManager { public: INodeDefManager *ndef; + bool enable_mapgen_debug_info; - std::vector mapgen; - std::vector emergethread; - - bool threads_active; - - //settings - MapgenParams params; - bool mapgen_debug_info; - u16 qlimit_total; - u16 qlimit_diskonly; - u16 qlimit_generate; - + // Generation Notify u32 gen_notify_on; std::set gen_notify_on_deco_ids; - //// Block emerge queue data structures - JMutex queuemutex; - std::map blocks_enqueued; - std::map peer_queue_count; + // Map generation parameters + MapgenParams params; - //// Managers of map generation-related components + // Managers of various map generation-related components BiomeManager *biomemgr; OreManager *oremgr; DecorationManager *decomgr; SchematicManager *schemmgr; - //// Methods + // Methods EmergeManager(IGameDef *gamedef); ~EmergeManager(); void loadMapgenParams(); - static MapgenSpecificParams *createMapgenParams(const std::string &mgname); void initMapgens(); - Mapgen *getCurrentMapgen(); - Mapgen *createMapgen(const std::string &mgname, int mgid, - MapgenParams *mgparams); - static void getMapgenNames(std::list &mgnames); + void startThreads(); void stopThreads(); - bool enqueueBlockEmerge(u16 peer_id, v3s16 p, bool allow_generate); + bool isRunning(); - //mapgen helper methods + bool enqueueBlockEmerge( + u16 peer_id, + v3s16 blockpos, + bool allow_generate, + bool ignore_queue_limits=false); + + bool enqueueBlockEmergeEx( + v3s16 blockpos, + u16 peer_id, + u16 flags, + EmergeCompletionCallback callback, + void *callback_param); + + v3s16 getContainingChunk(v3s16 blockpos); + + Mapgen *getCurrentMapgen(); + + // Mapgen helpers methods Biome *getBiomeAtPoint(v3s16 p); int getGroundLevelAtPoint(v2s16 p); bool isBlockUnderground(v3s16 blockpos); + + static MapgenFactory *getMapgenFactory(const std::string &mgname); + static void getMapgenNames( + std::vector *mgnames, bool include_hidden); + static v3s16 getContainingChunk(v3s16 blockpos, s16 chunksize); + +private: + std::vector m_mapgens; + std::vector m_threads; + bool m_threads_active; + + Mutex m_queue_mutex; + std::map m_blocks_enqueued; + std::map m_peer_queue_count; + + u16 m_qlimit_total; + u16 m_qlimit_diskonly; + u16 m_qlimit_generate; + + // Requires m_queue_mutex held + EmergeThread *getOptimalThread(); + bool pushBlockEmergeData(v3s16 pos, u16 peer_requested, u16 flags, + EmergeCompletionCallback callback, void *callback_param); + bool popBlockEmergeData(v3s16 pos, BlockEmergeData *bedata); + + friend class EmergeThread; + + DISABLE_CLASS_COPY(EmergeManager); }; #endif diff --git a/src/environment.cpp b/src/environment.cpp index d04ad907..9d339fc4 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -39,11 +39,12 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapblock_mesh.h" #include "event.h" #endif +#include "server.h" #include "daynightratio.h" #include "map.h" #include "emerge.h" #include "util/serialize.h" -#include "jthread/jmutexautolock.h" +#include "threading/mutex_auto_lock.h" #define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")" @@ -69,7 +70,7 @@ Environment::~Environment() void Environment::addPlayer(Player *player) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); /* Check that peer_ids are unique. Also check that names are unique. @@ -84,28 +85,11 @@ void Environment::addPlayer(Player *player) m_players.push_back(player); } -void Environment::removePlayer(u16 peer_id) -{ - DSTACK(__FUNCTION_NAME); - - for(std::vector::iterator i = m_players.begin(); - i != m_players.end();) - { - Player *player = *i; - if(player->peer_id == peer_id) { - delete player; - i = m_players.erase(i); - } else { - ++i; - } - } -} - -void Environment::removePlayer(const char *name) +void Environment::removePlayer(Player* player) { for (std::vector::iterator it = m_players.begin(); it != m_players.end(); ++it) { - if (strcmp((*it)->getName(), name) == 0) { + if ((*it) == player) { delete *it; m_players.erase(it); return; @@ -196,70 +180,70 @@ std::vector Environment::getPlayers(bool ignore_disconnected) u32 Environment::getDayNightRatio() { - if(m_enable_day_night_ratio_override) + MutexAutoLock(this->m_time_lock); + if (m_enable_day_night_ratio_override) return m_day_night_ratio_override; - return time_to_daynight_ratio(m_time_of_day_f*24000, m_cache_enable_shaders); + return time_to_daynight_ratio(m_time_of_day_f * 24000, m_cache_enable_shaders); } void Environment::setTimeOfDaySpeed(float speed) { - JMutexAutoLock(this->m_timeofday_lock); + MutexAutoLock(this->m_time_lock); m_time_of_day_speed = speed; } float Environment::getTimeOfDaySpeed() { - JMutexAutoLock(this->m_timeofday_lock); + MutexAutoLock(this->m_time_lock); float retval = m_time_of_day_speed; return retval; } void Environment::setTimeOfDay(u32 time) { - JMutexAutoLock(this->m_time_lock); + MutexAutoLock(this->m_time_lock); m_time_of_day = time; m_time_of_day_f = (float)time / 24000.0; } u32 Environment::getTimeOfDay() { - JMutexAutoLock(this->m_time_lock); + MutexAutoLock(this->m_time_lock); u32 retval = m_time_of_day; return retval; } float Environment::getTimeOfDayF() { - JMutexAutoLock(this->m_time_lock); + MutexAutoLock(this->m_time_lock); float retval = m_time_of_day_f; return retval; } void Environment::stepTimeOfDay(float dtime) { - // getTimeOfDaySpeed lock the value we need to prevent MT problems - float day_speed = getTimeOfDaySpeed(); + MutexAutoLock(this->m_time_lock); m_time_counter += dtime; - f32 speed = day_speed * 24000./(24.*3600); - u32 units = (u32)(m_time_counter*speed); + f32 speed = m_time_of_day_speed * 24000. / (24. * 3600); + u32 units = (u32)(m_time_counter * speed); bool sync_f = false; - if(units > 0){ + if (units > 0) { // Sync at overflow - if(m_time_of_day + units >= 24000) + if (m_time_of_day + units >= 24000) sync_f = true; m_time_of_day = (m_time_of_day + units) % 24000; - if(sync_f) + if (sync_f) m_time_of_day_f = (float)m_time_of_day / 24000.0; } if (speed > 0) { m_time_counter -= (f32)units / speed; } - if(!sync_f){ - m_time_of_day_f += day_speed/24/3600*dtime; - if(m_time_of_day_f > 1.0) + if (!sync_f) { + m_time_of_day_f += m_time_of_day_speed / 24 / 3600 * dtime; + if (m_time_of_day_f > 1.0) m_time_of_day_f -= 1.0; - if(m_time_of_day_f < 0.0) + if (m_time_of_day_f < 0.0) m_time_of_day_f += 1.0; } } @@ -425,6 +409,18 @@ bool ServerEnvironment::line_of_sight(v3f pos1, v3f pos2, float stepsize, v3s16 return true; } +void ServerEnvironment::kickAllPlayers(AccessDeniedCode reason, + const std::string &str_reason, bool reconnect) +{ + for (std::vector::iterator it = m_players.begin(); + it != m_players.end(); + ++it) { + ((Server*)m_gamedef)->DenyAccessVerCompliant((*it)->peer_id, + (*it)->protocol_version, (AccessDeniedCode)reason, + str_reason, reconnect); + } +} + void ServerEnvironment::saveLoadedPlayers() { std::string players_path = m_path_world + DIR_DELIM "players"; @@ -440,15 +436,12 @@ void ServerEnvironment::saveLoadedPlayers() } } -void ServerEnvironment::savePlayer(const std::string &playername) +void ServerEnvironment::savePlayer(RemotePlayer *player) { std::string players_path = m_path_world + DIR_DELIM "players"; fs::CreateDir(players_path); - RemotePlayer *player = static_cast(getPlayer(playername.c_str())); - if (player) { - player->save(players_path); - } + player->save(players_path); } Player *ServerEnvironment::loadPlayer(const std::string &playername) @@ -584,35 +577,39 @@ public: i->timer -= trigger_interval; actual_interval = trigger_interval; } - float intervals = actual_interval / trigger_interval; - if(intervals == 0) - continue; float chance = abm->getTriggerChance(); if(chance == 0) chance = 1; ActiveABM aabm; aabm.abm = abm; - aabm.chance = chance / intervals; - if(aabm.chance == 0) - aabm.chance = 1; + if(abm->getSimpleCatchUp()) { + float intervals = actual_interval / trigger_interval; + if(intervals == 0) + continue; + aabm.chance = chance / intervals; + if(aabm.chance == 0) + aabm.chance = 1; + } else { + aabm.chance = chance; + } // Trigger neighbors std::set required_neighbors_s = abm->getRequiredNeighbors(); for(std::set::iterator i = required_neighbors_s.begin(); - i != required_neighbors_s.end(); i++) + i != required_neighbors_s.end(); ++i) { ndef->getIds(*i, aabm.required_neighbors); } // Trigger contents std::set contents_s = abm->getTriggerContents(); for(std::set::iterator - i = contents_s.begin(); i != contents_s.end(); i++) + i = contents_s.begin(); i != contents_s.end(); ++i) { std::set ids; ndef->getIds(*i, ids); for(std::set::const_iterator k = ids.begin(); - k != ids.end(); k++) + k != ids.end(); ++k) { content_t c = *k; std::map >::iterator j; @@ -681,7 +678,7 @@ public: continue; for(std::vector::iterator - i = j->second.begin(); i != j->second.end(); i++) { + i = j->second.begin(); i != j->second.end(); ++i) { if(myrand() % i->chance != 0) continue; @@ -759,7 +756,7 @@ void ServerEnvironment::activateBlock(MapBlock *block, u32 additional_dtime) MapNode n; for(std::map::iterator i = elapsed_timers.begin(); - i != elapsed_timers.end(); i++){ + i != elapsed_timers.end(); ++i){ n = block->getNodeNoEx(i->first); v3s16 p = i->first + block->getPosRelative(); if(m_script->node_on_timer(p,n,i->second.elapsed)) @@ -989,7 +986,7 @@ void ServerEnvironment::clearAllObjects() void ServerEnvironment::step(float dtime) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); //TimeTaker timer("ServerEnv step"); @@ -1148,7 +1145,7 @@ void ServerEnvironment::step(float dtime) MapNode n; for(std::map::iterator i = elapsed_timers.begin(); - i != elapsed_timers.end(); i++){ + i != elapsed_timers.end(); ++i){ n = block->getNodeNoEx(i->first); p = i->first + block->getPosRelative(); if(m_script->node_on_timer(p,n,i->second.elapsed)) @@ -1195,7 +1192,7 @@ void ServerEnvironment::step(float dtime) u32 time_ms = timer.stop(true); u32 max_time_ms = 200; if(time_ms > max_time_ms){ - infostream<<"WARNING: active block modifiers took " + warningstream<<"active block modifiers took " <getBasePosition(); - - // The block in which the object resides in - v3s16 blockpos_o = getNodeBlockPos(floatToInt(objectpos, BS)); - - /* - Update the static data - */ - - // Create new static object - std::string staticdata = obj->getStaticData(); - StaticObject s_obj(obj->getType(), objectpos, staticdata); - // Add to the block where the object is located in - v3s16 blockpos = getNodeBlockPos(floatToInt(objectpos, BS)); - // Get or generate the block - MapBlock *block = m_map->emergeBlock(blockpos); - - bool succeeded = false; - - if(block) - { - block->m_static_objects.insert(0, s_obj); - block->raiseModified(MOD_STATE_WRITE_AT_UNLOAD, - "addActiveObjectAsStatic"); - succeeded = true; - } - else{ - infostream<<"ServerEnvironment::addActiveObjectAsStatic: " - <<"Could not find or generate " - <<"a block for storing static object"<environmentDeletes()) - delete obj; - - return succeeded; -} -#endif - /* Finds out what new objects have been added to inside a radius around a position */ -void ServerEnvironment::getAddedActiveObjects(v3s16 pos, s16 radius, +void ServerEnvironment::getAddedActiveObjects(Player *player, s16 radius, s16 player_radius, std::set ¤t_objects, - std::set &added_objects) + std::queue &added_objects) { - v3f pos_f = intToFloat(pos, BS); f32 radius_f = radius * BS; f32 player_radius_f = player_radius * BS; @@ -1371,18 +1322,19 @@ void ServerEnvironment::getAddedActiveObjects(v3s16 pos, s16 radius, */ for(std::map::iterator i = m_active_objects.begin(); - i != m_active_objects.end(); ++i) - { + i != m_active_objects.end(); ++i) { u16 id = i->first; + // Get object ServerActiveObject *object = i->second; if(object == NULL) continue; + // Discard if removed or deactivating if(object->m_removed || object->m_pending_deactivation) continue; - f32 distance_f = object->getBasePosition().getDistanceFrom(pos_f); + f32 distance_f = object->getBasePosition().getDistanceFrom(player->getPosition()); if (object->getType() == ACTIVEOBJECT_TYPE_PLAYER) { // Discard if too far if (distance_f > player_radius_f && player_radius_f != 0) @@ -1396,7 +1348,7 @@ void ServerEnvironment::getAddedActiveObjects(v3s16 pos, s16 radius, if(n != current_objects.end()) continue; // Add to added_objects - added_objects.insert(id); + added_objects.push(id); } } @@ -1404,12 +1356,11 @@ void ServerEnvironment::getAddedActiveObjects(v3s16 pos, s16 radius, Finds out what objects have been removed from inside a radius around a position */ -void ServerEnvironment::getRemovedActiveObjects(v3s16 pos, s16 radius, +void ServerEnvironment::getRemovedActiveObjects(Player *player, s16 radius, s16 player_radius, std::set ¤t_objects, - std::set &removed_objects) + std::queue &removed_objects) { - v3f pos_f = intToFloat(pos, BS); f32 radius_f = radius * BS; f32 player_radius_f = player_radius * BS; @@ -1431,20 +1382,19 @@ void ServerEnvironment::getRemovedActiveObjects(v3s16 pos, s16 radius, u16 id = *i; ServerActiveObject *object = getActiveObject(id); - if(object == NULL){ - infostream<<"ServerEnvironment::getRemovedActiveObjects():" - <<" object in current_objects is NULL"<m_removed || object->m_pending_deactivation) - { - removed_objects.insert(id); + if (object->m_removed || object->m_pending_deactivation) { + removed_objects.push(id); continue; } - f32 distance_f = object->getBasePosition().getDistanceFrom(pos_f); + f32 distance_f = object->getBasePosition().getDistanceFrom(player->getPosition()); if (object->getType() == ACTIVEOBJECT_TYPE_PLAYER) { if (distance_f <= player_radius_f || player_radius_f == 0) continue; @@ -1452,7 +1402,34 @@ void ServerEnvironment::getRemovedActiveObjects(v3s16 pos, s16 radius, continue; // Object is no longer visible - removed_objects.insert(id); + removed_objects.push(id); + } +} + +void ServerEnvironment::setStaticForActiveObjectsInBlock( + v3s16 blockpos, bool static_exists, v3s16 static_block) +{ + MapBlock *block = m_map->getBlockNoCreateNoEx(blockpos); + if (!block) + return; + + for (std::map::iterator + so_it = block->m_static_objects.m_active.begin(); + so_it != block->m_static_objects.m_active.end(); ++so_it) { + // Get the ServerActiveObject counterpart to this StaticObject + std::map::iterator ao_it; + ao_it = m_active_objects.find(so_it->first); + if (ao_it == m_active_objects.end()) { + // If this ever happens, there must be some kind of nasty bug. + errorstream << "ServerEnvironment::setStaticForObjectsInBlock(): " + "Object from MapBlock::m_static_objects::m_active not found " + "in m_active_objects"; + continue; + } + + ServerActiveObject *sao = ao_it->second; + sao->m_static_exists = static_exists; + sao->m_static_block = static_block; } } @@ -1498,6 +1475,17 @@ u16 ServerEnvironment::addActiveObjectRaw(ServerActiveObject *object, delete object; return 0; } + + if (objectpos_over_limit(object->getBasePosition())) { + v3f p = object->getBasePosition(); + errorstream << "ServerEnvironment::addActiveObjectRaw(): " + << "object position (" << p.X << "," << p.Y << "," << p.Z + << ") outside maximum range" << std::endl; + if (object->environmentDeletes()) + delete object; + return 0; + } + /*infostream<<"ServerEnvironment::addActiveObjectRaw(): " <<"added (id="<getId()<<")"<m_static_exists){ - if(obj->m_static_block == blockpos_o) + if (obj->m_static_exists) { + if (obj->m_static_block == blockpos_o) stays_in_same_block = true; MapBlock *block = m_map->emergeBlock(obj->m_static_block, false); - std::map::iterator n = + if (block) { + std::map::iterator n = block->m_static_objects.m_active.find(id); - if(n != block->m_static_objects.m_active.end()){ - StaticObject static_old = n->second; + if (n != block->m_static_objects.m_active.end()) { + StaticObject static_old = n->second; - float save_movem = obj->getMinimumSavedMovement(); + float save_movem = obj->getMinimumSavedMovement(); - if(static_old.data == staticdata_new && - (static_old.pos - objectpos).getLength() < save_movem) - data_changed = false; - } else { - errorstream<<"ServerEnvironment::deactivateFarObjects(): " + if (static_old.data == staticdata_new && + (static_old.pos - objectpos).getLength() < save_movem) + data_changed = false; + } else { + errorstream<<"ServerEnvironment::deactivateFarObjects(): " <<"id="<m_static_block)<m_static_objects.m_active.find(id) != block->m_static_objects.m_active.end()){ - infostream<<"ServerEnv: WARNING: Performing hack #83274" + warningstream<<"ServerEnv: Performing hack #83274" <m_static_objects.remove(id); } @@ -1990,7 +1980,6 @@ void ServerEnvironment::deactivateFarObjects(bool force_delete) } } - #ifndef SERVER #include "clientsimpleobject.h" @@ -2009,7 +1998,7 @@ ClientEnvironment::ClientEnvironment(ClientMap *map, scene::ISceneManager *smgr, m_irr(irr) { char zero = 0; - memset(m_attachements, zero, sizeof(m_attachements)); + memset(attachement_parent_ids, zero, sizeof(attachement_parent_ids)); } ClientEnvironment::~ClientEnvironment() @@ -2043,7 +2032,7 @@ ClientMap & ClientEnvironment::getClientMap() void ClientEnvironment::addPlayer(Player *player) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); /* It is a failure if player is local and there already is a local player @@ -2067,7 +2056,7 @@ LocalPlayer * ClientEnvironment::getLocalPlayer() void ClientEnvironment::step(float dtime) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); /* Step time of day */ stepTimeOfDay(dtime); @@ -2172,15 +2161,6 @@ void ClientEnvironment::step(float dtime) v3f d = d_wanted.normalize() * dl; speed += d; - -#if 0 // old code - if(speed.X > lplayer->movement_liquid_fluidity + lplayer->movement_liquid_fluidity_smooth) speed.X -= lplayer->movement_liquid_fluidity_smooth; - if(speed.X < -lplayer->movement_liquid_fluidity - lplayer->movement_liquid_fluidity_smooth) speed.X += lplayer->movement_liquid_fluidity_smooth; - if(speed.Y > lplayer->movement_liquid_fluidity + lplayer->movement_liquid_fluidity_smooth) speed.Y -= lplayer->movement_liquid_fluidity_smooth; - if(speed.Y < -lplayer->movement_liquid_fluidity - lplayer->movement_liquid_fluidity_smooth) speed.Y += lplayer->movement_liquid_fluidity_smooth; - if(speed.Z > lplayer->movement_liquid_fluidity + lplayer->movement_liquid_fluidity_smooth) speed.Z -= lplayer->movement_liquid_fluidity_smooth; - if(speed.Z < -lplayer->movement_liquid_fluidity - lplayer->movement_liquid_fluidity_smooth) speed.Z += lplayer->movement_liquid_fluidity_smooth; -#endif } lplayer->setSpeed(speed); @@ -2403,6 +2383,15 @@ void ClientEnvironment::addSimpleObject(ClientSimpleObject *simple) m_simple_objects.push_back(simple); } +GenericCAO* ClientEnvironment::getGenericCAO(u16 id) +{ + ClientActiveObject *obj = getActiveObject(id); + if (obj && obj->getType() == ACTIVEOBJECT_TYPE_GENERIC) + return (GenericCAO*) obj; + else + return NULL; +} + ClientActiveObject* ClientEnvironment::getActiveObject(u16 id) { std::map::iterator n; @@ -2529,28 +2518,23 @@ void ClientEnvironment::removeActiveObject(u16 id) m_active_objects.erase(id); } -void ClientEnvironment::processActiveObjectMessage(u16 id, - const std::string &data) +void ClientEnvironment::processActiveObjectMessage(u16 id, const std::string &data) { - ClientActiveObject* obj = getActiveObject(id); - if(obj == NULL) - { - infostream<<"ClientEnvironment::processActiveObjectMessage():" - <<" got message for id="<processMessage(data); - } - catch(SerializationError &e) - { + } catch (SerializationError &e) { errorstream<<"ClientEnvironment::processActiveObjectMessage():" - <<" id="< m_players; + + + /* + * Below: values under m_time_lock + */ // Time of day in milli-hours (0-23999); determines day and night u32 m_time_of_day; // Time of day in 0...1 @@ -113,6 +119,9 @@ protected: // Overriding the day-night ratio is useful for custom sky visuals bool m_enable_day_night_ratio_override; u32 m_day_night_ratio_override; + /* + * Above: values under m_time_lock + */ /* TODO: Add a callback function so these can be updated when a setting * changes. At this point in time it doesn't matter (e.g. /set @@ -126,9 +135,9 @@ protected: bool m_cache_enable_shaders; private: - JMutex m_timeofday_lock; - JMutex m_time_lock; + Mutex m_time_lock; + DISABLE_CLASS_COPY(Environment); }; /* @@ -154,6 +163,8 @@ public: virtual float getTriggerInterval() = 0; // Random chance of (1 / return value), 0 is disallowed virtual u32 getTriggerChance() = 0; + // Whether to modify chance to simulate time lost by an unnattended block + virtual bool getSimpleCatchUp() = 0; // This is called usually at interval for 1/chance of the nodes virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n){}; virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n, @@ -221,9 +232,11 @@ public: float getSendRecommendedInterval() { return m_recommended_send_interval; } + void kickAllPlayers(AccessDeniedCode reason, + const std::string &str_reason, bool reconnect); // Save players void saveLoadedPlayers(); - void savePlayer(const std::string &playername); + void savePlayer(RemotePlayer *player); Player *loadPlayer(const std::string &playername); /* @@ -262,19 +275,19 @@ public: Find out what new objects have been added to inside a radius around a position */ - void getAddedActiveObjects(v3s16 pos, s16 radius, + void getAddedActiveObjects(Player *player, s16 radius, s16 player_radius, std::set ¤t_objects, - std::set &added_objects); + std::queue &added_objects); /* Find out what new objects have been removed from inside a radius around a position */ - void getRemovedActiveObjects(v3s16 pos, s16 radius, + void getRemovedActiveObjects(Player* player, s16 radius, s16 player_radius, std::set ¤t_objects, - std::set &removed_objects); + std::queue &removed_objects); /* Get the next message emitted by some active object. @@ -324,6 +337,11 @@ public: std::set* getForceloadedBlocks() { return &m_active_blocks.m_forceloaded_list; }; + // Sets the static object status all the active objects in the specified block + // This is only really needed for deleting blocks from the map + void setStaticForActiveObjectsInBlock(v3s16 blockpos, + bool static_exists, v3s16 static_block=v3s16(0,0,0)); + private: /* @@ -405,6 +423,8 @@ private: #ifndef SERVER #include "clientobject.h" +#include "content_cao.h" + class ClientSimpleObject; /* @@ -467,6 +487,7 @@ public: ActiveObjects */ + GenericCAO* getGenericCAO(u16 id); ClientActiveObject* getActiveObject(u16 id); /* @@ -502,7 +523,7 @@ public: // Get event from queue. CEE_NONE is returned if queue is empty. ClientEnvEvent getClientEvent(); - u16 m_attachements[USHRT_MAX]; + u16 attachement_parent_ids[USHRT_MAX + 1]; std::list getPlayerNames() { return m_player_names; } @@ -523,7 +544,7 @@ private: IrrlichtDevice *m_irr; std::map m_active_objects; std::vector m_simple_objects; - std::list m_client_event_queue; + std::queue m_client_event_queue; IntervalLimiter m_active_object_light_update_interval; IntervalLimiter m_lava_hurt_interval; IntervalLimiter m_drowning_interval; diff --git a/src/event_manager.h b/src/event_manager.h index 8a8b3464..d75bd75f 100644 --- a/src/event_manager.h +++ b/src/event_manager.h @@ -53,7 +53,7 @@ public: if(i != m_dest.end()){ std::list &funcs = i->second.funcs; for(std::list::iterator i = funcs.begin(); - i != funcs.end(); i++){ + i != funcs.end(); ++i){ (*(i->f))(e, i->d); } } @@ -83,12 +83,12 @@ public: if(remove) funcs.erase(j++); else - j++; + ++j; } } } else{ for(std::map::iterator - i = m_dest.begin(); i != m_dest.end(); i++){ + i = m_dest.begin(); i != m_dest.end(); ++i){ std::list &funcs = i->second.funcs; std::list::iterator j = funcs.begin(); while(j != funcs.end()){ @@ -96,7 +96,7 @@ public: if(remove) funcs.erase(j++); else - j++; + ++j; } } } diff --git a/src/exceptions.h b/src/exceptions.h index 8fb6212d..d2a6a8e9 100644 --- a/src/exceptions.h +++ b/src/exceptions.h @@ -125,6 +125,12 @@ public: PrngException(std::string s): BaseException(s) {} }; +class ModError : public BaseException { +public: + ModError(const std::string &s): BaseException(s) {} +}; + + /* Some "old-style" interrupts: */ diff --git a/src/filesys.cpp b/src/filesys.cpp index 25c8adf1..6f74bd97 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -142,7 +142,7 @@ bool RecursiveDelete(const std::string &path) infostream<<"RecursiveDelete: Deleting content of directory " < content = GetDirListing(path); - for(int i=0; ireadSettings(); } @@ -121,7 +122,7 @@ void FontEngine::cleanCache() for (std::map::iterator iter = m_font_cache[i].begin(); - iter != m_font_cache[i].end(); iter++) { + iter != m_font_cache[i].end(); ++iter) { iter->second->drop(); iter->second = NULL; } diff --git a/src/fontengine.h b/src/fontengine.h index a9361233..dba47a2d 100644 --- a/src/fontengine.h +++ b/src/fontengine.h @@ -59,7 +59,7 @@ public: unsigned int font_size=FONT_SIZE_UNSPECIFIED, FontMode mode=FM_Unspecified) { - return getTextWidth(narrow_to_wide(text)); + return getTextWidth(utf8_to_wide(text)); } /** get text width if a text for a specific font */ diff --git a/src/game.cpp b/src/game.cpp index d1921d23..9c2d5db6 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -40,7 +40,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "guiPasswordChange.h" #include "guiVolumeChange.h" #include "hud.h" -#include "logoutputbuffer.h" #include "mainmenumanager.h" #include "mapblock.h" #include "nodedef.h" // Needed for determining pointing to nodes @@ -57,6 +56,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/directiontables.h" #include "util/pointedthing.h" #include "version.h" +#include "minimap.h" #include "sound.h" @@ -88,7 +88,7 @@ struct TextDestNodeMetadata : public TextDest { // This is deprecated I guess? -celeron55 void gotText(std::wstring text) { - std::string ntext = wide_to_narrow(text); + std::string ntext = wide_to_utf8(text); infostream << "Submitting 'text' field of node at (" << m_p.X << "," << m_p.Y << "," << m_p.Z << "): " << ntext << std::endl; StringMap fields; @@ -186,7 +186,7 @@ struct LocalFormspecHandler : public TextDest { (fields.find("quit") != fields.end())) { StringMap::const_iterator it = fields.find("f_text"); if (it != fields.end()) - m_client->typeChatMessage(narrow_to_wide(it->second)); + m_client->typeChatMessage(utf8_to_wide(it->second)); return; } @@ -378,7 +378,7 @@ PointedThing getPointedThing(Client *client, v3f player_position, for (std::vector::const_iterator i = boxes.begin(); - i != boxes.end(); i++) { + i != boxes.end(); ++i) { aabb3f box = *i; box.MinEdge += npf; box.MaxEdge += npf; @@ -423,7 +423,7 @@ PointedThing getPointedThing(Client *client, v3f player_position, if (!g_settings->getBool("enable_node_highlighting")) { for (std::vector::const_iterator i2 = boxes.begin(); - i2 != boxes.end(); i2++) { + i2 != boxes.end(); ++i2) { aabb3f box = *i2; box.MinEdge += npf + v3f(-d, -d, -d) - intToFloat(camera_offset, BS); box.MaxEdge += npf + v3f(d, d, d) - intToFloat(camera_offset, BS); @@ -448,7 +448,7 @@ void update_profiler_gui(gui::IGUIStaticText *guitext_profiler, FontEngine *fe, std::ostringstream os(std::ios_base::binary); g_profiler->printPage(os, show_profiler, show_profiler_max); - std::wstring text = narrow_to_wide(os.str()); + std::wstring text = utf8_to_wide(os.str()); guitext_profiler->setText(text.c_str()); guitext_profiler->setVisible(true); @@ -517,11 +517,11 @@ public: std::map m_meta; for (std::vector::const_iterator k = m_log.begin(); - k != m_log.end(); k++) { + k != m_log.end(); ++k) { const Piece &piece = *k; for (Profiler::GraphValues::const_iterator i = piece.values.begin(); - i != piece.values.end(); i++) { + i != piece.values.end(); ++i) { const std::string &id = i->first; const float &value = i->second; std::map::iterator j = @@ -553,7 +553,7 @@ public: u32 next_color_i = 0; for (std::map::iterator i = m_meta.begin(); - i != m_meta.end(); i++) { + i != m_meta.end(); ++i) { Meta &meta = i->second; video::SColor color(255, 200, 200, 200); @@ -569,7 +569,7 @@ public: s32 meta_i = 0; for (std::map::const_iterator i = m_meta.begin(); - i != m_meta.end(); i++) { + i != m_meta.end(); ++i) { const std::string &id = i->first; const Meta &meta = i->second; s32 x = x_left; @@ -585,16 +585,16 @@ public: s32 texth = 15; char buf[10]; snprintf(buf, 10, "%.3g", show_max); - font->draw(narrow_to_wide(buf).c_str(), + font->draw(utf8_to_wide(buf).c_str(), core::rect(textx, y - graphh, textx2, y - graphh + texth), meta.color); snprintf(buf, 10, "%.3g", show_min); - font->draw(narrow_to_wide(buf).c_str(), + font->draw(utf8_to_wide(buf).c_str(), core::rect(textx, y - texth, textx2, y), meta.color); - font->draw(narrow_to_wide(id).c_str(), + font->draw(utf8_to_wide(id).c_str(), core::rect(textx, y - graphh / 2 - texth / 2, textx2, y - graphh / 2 + texth / 2), meta.color); @@ -605,7 +605,7 @@ public: bool lastscaledvalue_exists = false; for (std::vector::const_iterator j = m_log.begin(); - j != m_log.end(); j++) { + j != m_log.end(); ++j) { const Piece &piece = *j; float value = 0; bool value_exists = false; @@ -809,7 +809,7 @@ public: m_fogEnabled = g_settings->getBool("enable_fog"); } - static void SettingsCallback(const std::string name, void *userdata) + static void SettingsCallback(const std::string &name, void *userdata) { reinterpret_cast(userdata)->onSettingsChange(name); } @@ -870,6 +870,9 @@ public: services->setPixelShaderConstant("eyePosition", (irr::f32 *)&eye_position, 3); services->setVertexShaderConstant("eyePosition", (irr::f32 *)&eye_position, 3); + v3f minimap_yaw_vec = m_client->getMapper()->getYawVec(); + services->setPixelShaderConstant("yawVec", (irr::f32 *)&minimap_yaw_vec, 3); + // Uniform sampler layers int layer0 = 0; int layer1 = 1; @@ -878,11 +881,11 @@ public: #if (IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 8) services->setPixelShaderConstant("baseTexture" , (irr::f32 *)&layer0, 1); services->setPixelShaderConstant("normalTexture" , (irr::f32 *)&layer1, 1); - services->setPixelShaderConstant("useNormalmap" , (irr::f32 *)&layer2, 1); + services->setPixelShaderConstant("textureFlags" , (irr::f32 *)&layer2, 1); #else services->setPixelShaderConstant("baseTexture" , (irr::s32 *)&layer0, 1); services->setPixelShaderConstant("normalTexture" , (irr::s32 *)&layer1, 1); - services->setPixelShaderConstant("useNormalmap" , (irr::s32 *)&layer2, 1); + services->setPixelShaderConstant("textureFlags" , (irr::s32 *)&layer2, 1); #endif } }; @@ -1053,7 +1056,7 @@ static void show_chat_menu(GUIFormSpecMenu **cur_formspec, FORMSPEC_VERSION_STRING SIZE_TAG "field[3,2.35;6,0.5;f_text;;" + text + "]" - "button_exit[4,3;3,0.5;btn_send;" + wide_to_narrow(wstrgettext("Proceed")) + "]" + "button_exit[4,3;3,0.5;btn_send;" + strgettext("Proceed") + "]" ; /* Create menu */ @@ -1126,23 +1129,23 @@ static void show_pause_menu(GUIFormSpecMenu **cur_formspec, os << FORMSPEC_VERSION_STRING << PAUSE_MENU_SIZE_TAG << "button_exit[" << PAUSE_MENU_BUTTON_LEFT << "," << (ypos++) << ";3,0.5;btn_continue;" - << wide_to_narrow(wstrgettext("Continue")) << "]"; + << strgettext("Continue") << "]"; if (!singleplayermode) { os << "button_exit[" << PAUSE_MENU_BUTTON_LEFT << "," << (ypos++) << ";3,0.5;btn_change_password;" - << wide_to_narrow(wstrgettext("Change Password")) << "]"; + << strgettext("Change Password") << "]"; } #ifndef __ANDROID__ os << "button_exit[" << PAUSE_MENU_BUTTON_LEFT << "," << (ypos++) << ";3,0.5;btn_sound;" - << wide_to_narrow(wstrgettext("Sound Volume")) << "]"; + << strgettext("Sound Volume") << "]"; os << "button_exit[" << PAUSE_MENU_BUTTON_LEFT << "," << (ypos++) << ";3,0.5;btn_key_config;" - << wide_to_narrow(wstrgettext("Change Keys")) << "]"; + << strgettext("Change Keys") << "]"; #endif os << "button_exit[" << PAUSE_MENU_BUTTON_LEFT << "," << (ypos++) << ";3,0.5;btn_exit_menu;" - << wide_to_narrow(wstrgettext("Exit to Menu")) << "]"; + << strgettext("Exit to Menu") << "]"; os << "button_exit[" << PAUSE_MENU_BUTTON_LEFT << "," << (ypos++) << ";3,0.5;btn_exit_os;" - << wide_to_narrow(wstrgettext("Exit to OS")) << "]" + << strgettext("Exit to OS") << "]" #ifndef __ANDROID__ << "textarea[7.5,0.25;3.9,6.25;;" << control_text << ";]" << "textarea[0.4,0.25;3.5,6;;" << PROJECT_NAME_C "\n" @@ -1158,7 +1161,8 @@ static void show_pause_menu(GUIFormSpecMenu **cur_formspec, LocalFormspecHandler *txt_dst = new LocalFormspecHandler("MT_PAUSE_MENU"); create_formspec_menu(cur_formspec, invmgr, gamedef, tsrc, device, fs_src, txt_dst, NULL); - (*cur_formspec)->setFocus(L"btn_continue"); + std::string con("btn_continue"); + (*cur_formspec)->setFocus(con); (*cur_formspec)->doPause = true; } @@ -1168,11 +1172,11 @@ static void updateChat(Client &client, f32 dtime, bool show_debug, ChatBackend &chat_backend, gui::IGUIStaticText *guitext_chat) { // Add chat log output for errors to be shown in chat - static LogOutputBuffer chat_log_error_buf(LMT_ERROR); + static LogOutputBuffer chat_log_error_buf(g_logger, LL_ERROR); // Get new messages from error log buffer while (!chat_log_error_buf.empty()) { - chat_backend.addMessage(L"", narrow_to_wide(chat_log_error_buf.get())); + chat_backend.addMessage(L"", utf8_to_wide(chat_log_error_buf.get())); } // Get new messages from client @@ -1240,6 +1244,7 @@ struct KeyCache { KEYMAP_ID_JUMP, KEYMAP_ID_SPECIAL1, KEYMAP_ID_SNEAK, + KEYMAP_ID_AUTORUN, // Other KEYMAP_ID_DROP, @@ -1247,6 +1252,7 @@ struct KeyCache { KEYMAP_ID_CHAT, KEYMAP_ID_CMD, KEYMAP_ID_CONSOLE, + KEYMAP_ID_MINIMAP, KEYMAP_ID_FREEMOVE, KEYMAP_ID_FASTMOVE, KEYMAP_ID_NOCLIP, @@ -1291,11 +1297,14 @@ void KeyCache::populate() key[KEYMAP_ID_SPECIAL1] = getKeySetting("keymap_special1"); key[KEYMAP_ID_SNEAK] = getKeySetting("keymap_sneak"); + key[KEYMAP_ID_AUTORUN] = getKeySetting("keymap_autorun"); + key[KEYMAP_ID_DROP] = getKeySetting("keymap_drop"); key[KEYMAP_ID_INVENTORY] = getKeySetting("keymap_inventory"); key[KEYMAP_ID_CHAT] = getKeySetting("keymap_chat"); key[KEYMAP_ID_CMD] = getKeySetting("keymap_cmd"); key[KEYMAP_ID_CONSOLE] = getKeySetting("keymap_console"); + key[KEYMAP_ID_MINIMAP] = getKeySetting("keymap_minimap"); key[KEYMAP_ID_FREEMOVE] = getKeySetting("keymap_freemove"); key[KEYMAP_ID_FASTMOVE] = getKeySetting("keymap_fastmove"); key[KEYMAP_ID_NOCLIP] = getKeySetting("keymap_noclip"); @@ -1402,6 +1411,7 @@ struct VolatileRunFlags { bool invert_mouse; bool show_chat; bool show_hud; + bool show_minimap; bool force_fog_off; bool show_debug; bool show_profiler_graph; @@ -1420,8 +1430,7 @@ struct VolatileRunFlags { * hides most of the stuff in this class (nothing in this class is required * by any other file) but exposes the public methods/data only. */ -class Game -{ +class Game { public: Game(); ~Game(); @@ -1437,6 +1446,7 @@ public: std::string *address, u16 port, std::string &error_message, + bool *reconnect, ChatBackend *chat_backend, const SubgameSpec &gamespec, // Used for local game bool simple_singleplayer_mode); @@ -1500,6 +1510,8 @@ protected: void toggleChat(float *statustext_time, bool *flag); void toggleHud(float *statustext_time, bool *flag); + void toggleMinimap(float *statustext_time, bool *flag, bool show_hud, + bool shift_pressed); void toggleFog(float *statustext_time, bool *flag); void toggleDebug(float *statustext_time, bool *show_debug, bool *show_profiler_graph); @@ -1546,6 +1558,9 @@ protected: void showOverlayMessage(const wchar_t *msg, float dtime, int percent, bool draw_clouds = true); + static void settingChangedCallback(const std::string &setting_name, void *data); + void readSettings(); + private: InputHandler *input; @@ -1578,6 +1593,7 @@ private: Sky *sky; // Free using ->Drop() Inventory *local_inventory; Hud *hud; + Mapper *mapper; /* 'cache' This class does take ownership/responsibily for cleaning up etc of any of @@ -1588,6 +1604,7 @@ private: scene::ISceneManager *smgr; bool *kill; std::string *error_message; + bool *reconnect_requested; IGameDef *gamedef; // Convenience (same as *client) scene::ISceneNode *skybox; @@ -1615,10 +1632,7 @@ private: IntervalLimiter profiler_interval; - /* TODO: Add a callback function so these can be updated when a setting - * changes. At this point in time it doesn't matter (e.g. /set - * is documented to change server settings only) - * + /* * TODO: Local caching of settings is not optimal and should at some stage * be updated to use a global settings object for getting thse values * (as opposed to the this local caching). This can be addressed in @@ -1658,17 +1672,29 @@ Game::Game() : clouds(NULL), sky(NULL), local_inventory(NULL), - hud(NULL) + hud(NULL), + mapper(NULL) { - m_cache_doubletap_jump = g_settings->getBool("doubletap_jump"); - m_cache_enable_node_highlighting = g_settings->getBool("enable_node_highlighting"); - m_cache_enable_clouds = g_settings->getBool("enable_clouds"); - m_cache_enable_particles = g_settings->getBool("enable_particles"); - m_cache_enable_fog = g_settings->getBool("enable_fog"); - m_cache_mouse_sensitivity = g_settings->getFloat("mouse_sensitivity"); - m_repeat_right_click_time = g_settings->getFloat("repeat_rightclick_time"); + g_settings->registerChangedCallback("doubletap_jump", + &settingChangedCallback, this); + g_settings->registerChangedCallback("enable_node_highlighting", + &settingChangedCallback, this); + g_settings->registerChangedCallback("enable_clouds", + &settingChangedCallback, this); + g_settings->registerChangedCallback("enable_particles", + &settingChangedCallback, this); + g_settings->registerChangedCallback("enable_fog", + &settingChangedCallback, this); + g_settings->registerChangedCallback("mouse_sensitivity", + &settingChangedCallback, this); + g_settings->registerChangedCallback("repeat_rightclick_time", + &settingChangedCallback, this); - m_cache_mouse_sensitivity = rangelim(m_cache_mouse_sensitivity, 0.001, 100.0); + readSettings(); + +#ifdef __ANDROID__ + m_cache_hold_aux1 = false; // This is initialised properly later +#endif #ifdef __ANDROID__ m_cache_hold_aux1 = false; // This is initialised properly later @@ -1703,6 +1729,21 @@ Game::~Game() delete draw_control; extendedResourceCleanup(); + + g_settings->deregisterChangedCallback("doubletap_jump", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("enable_node_highlighting", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("enable_clouds", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("enable_particles", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("enable_fog", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("mouse_sensitivity", + &settingChangedCallback, this); + g_settings->deregisterChangedCallback("repeat_rightclick_time", + &settingChangedCallback, this); } bool Game::startup(bool *kill, @@ -1715,17 +1756,19 @@ bool Game::startup(bool *kill, std::string *address, // can change if simple_singleplayer_mode u16 port, std::string &error_message, + bool *reconnect, ChatBackend *chat_backend, const SubgameSpec &gamespec, bool simple_singleplayer_mode) { // "cache" - this->device = device; - this->kill = kill; - this->error_message = &error_message; - this->random_input = random_input; - this->input = input; - this->chat_backend = chat_backend; + this->device = device; + this->kill = kill; + this->error_message = &error_message; + this->reconnect_requested = reconnect; + this->random_input = random_input; + this->input = input; + this->chat_backend = chat_backend; this->simple_singleplayer_mode = simple_singleplayer_mode; driver = device->getVideoDriver(); @@ -1760,6 +1803,7 @@ void Game::run() flags.show_chat = true; flags.show_hud = true; + flags.show_minimap = g_settings->getBool("enable_minimap"); flags.show_debug = g_settings->getBool("show_debug"); flags.invert_mouse = g_settings->getBool("invert_mouse"); flags.first_loop_after_window_activation = true; @@ -1834,6 +1878,9 @@ void Game::run() updateFrame(highlight_boxes, &graph, &stats, &runData, dtime, flags, cam_view); updateProfilerGraphs(&graph); + + // Update if minimap has been disabled by the server + flags.show_minimap &= !client->isMinimapDisabledByServer(); } } @@ -2061,8 +2108,7 @@ bool Game::createClient(const std::string &playername, /* Set window caption */ - std::wstring str = narrow_to_wide("MultiCraft"); - + std::wstring str = utf8_to_wide(PROJECT_NAME_C); str += L" ["; str += driver->getName(); str += L"]"; @@ -2080,6 +2126,9 @@ bool Game::createClient(const std::string &playername, return false; } + mapper = client->getMapper(); + mapper->setMinimapMode(MINIMAP_MODE_OFF); + return true; } @@ -2087,7 +2136,7 @@ bool Game::initGui() { // First line of debug text guitext = guienv->addStaticText( - narrow_to_wide("MultiCraft").c_str(), + utf8_to_wide(PROJECT_NAME_C).c_str(), core::rect(0, 0, 0, 0), false, false, guiroot); @@ -2239,6 +2288,7 @@ bool Game::connectToServer(const std::string &playername, if (client->accessDenied()) { *error_message = "Access denied. Reason: " + client->accessDeniedReason(); + *reconnect_requested = client->reconnectRequested(); errorstream << *error_message << std::endl; break; } @@ -2342,7 +2392,7 @@ bool Game::getServerContent(bool *aborted) } progress = 30 + client->mediaReceiveProgress() * 35 + 0.5; - draw_load_screen(narrow_to_wide(message.str()), device, + draw_load_screen(utf8_to_wide(message.str()), device, guienv, dtime, progress); } } @@ -2378,6 +2428,7 @@ inline bool Game::checkConnection() if (client->accessDenied()) { *error_message = "Access denied. Reason: " + client->accessDeniedReason(); + *reconnect_requested = client->reconnectRequested(); errorstream << *error_message << std::endl; return false; } @@ -2588,6 +2639,10 @@ void Game::processKeyboardInput(VolatileRunFlags *flags, if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_DROP])) { dropSelectedItem(); + // Add WoW-style autorun by toggling continuous forward. + } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_AUTORUN])) { + bool autorun_setting = g_settings->getBool("continuous_forward"); + g_settings->setBool("continuous_forward", !autorun_setting); } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_INVENTORY])) { openInventory(); } else if (input->wasKeyDown(EscapeKey) || input->wasKeyDown(CancelKey)) { @@ -2616,6 +2671,9 @@ void Game::processKeyboardInput(VolatileRunFlags *flags, client->makeScreenshot(device); } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_TOGGLE_HUD])) { toggleHud(statustext_time, &flags->show_hud); + } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_MINIMAP])) { + toggleMinimap(statustext_time, &flags->show_minimap, flags->show_hud, + input->isKeyDown(keycache.key[KeyCache::KEYMAP_ID_SNEAK])); } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_TOGGLE_CHAT])) { toggleChat(statustext_time, &flags->show_chat); } else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_TOGGLE_FORCE_FOG_OFF])) { @@ -2643,8 +2701,8 @@ void Game::processKeyboardInput(VolatileRunFlags *flags, else if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_DEBUG_STACKS])) { // Print debug stacks dstream << "-----------------------------------------" - << std::endl; - dstream << DTIME << "Printing debug stacks:" << std::endl; + << std::endl; + dstream << "Printing debug stacks:" << std::endl; dstream << "-----------------------------------------" << std::endl; debug_stacks_print(); @@ -2659,7 +2717,7 @@ void Game::processKeyboardInput(VolatileRunFlags *flags, if (quicktune->hasMessage()) { std::string msg = quicktune->getMessage(); - statustext = narrow_to_wide(msg); + statustext = utf8_to_wide(msg); *statustext_time = 0; } } @@ -2836,6 +2894,55 @@ void Game::toggleHud(float *statustext_time, bool *flag) client->setHighlighted(client->getHighlighted(), *flag); } +void Game::toggleMinimap(float *statustext_time, bool *flag, + bool show_hud, bool shift_pressed) +{ + if (!show_hud || !g_settings->getBool("enable_minimap")) + return; + + if (shift_pressed) { + mapper->toggleMinimapShape(); + return; + } + + u32 hud_flags = client->getEnv().getLocalPlayer()->hud_flags; + + MinimapMode mode = MINIMAP_MODE_OFF; + if (hud_flags & HUD_FLAG_MINIMAP_VISIBLE) { + mode = mapper->getMinimapMode(); + mode = (MinimapMode)((int)mode + 1); + } + + *flag = true; + switch (mode) { + case MINIMAP_MODE_SURFACEx1: + statustext = L"Minimap in surface mode, Zoom x1"; + break; + case MINIMAP_MODE_SURFACEx2: + statustext = L"Minimap in surface mode, Zoom x2"; + break; + case MINIMAP_MODE_SURFACEx4: + statustext = L"Minimap in surface mode, Zoom x4"; + break; + case MINIMAP_MODE_RADARx1: + statustext = L"Minimap in radar mode, Zoom x1"; + break; + case MINIMAP_MODE_RADARx2: + statustext = L"Minimap in radar mode, Zoom x2"; + break; + case MINIMAP_MODE_RADARx4: + statustext = L"Minimap in radar mode, Zoom x4"; + break; + default: + mode = MINIMAP_MODE_OFF; + *flag = false; + statustext = (hud_flags & HUD_FLAG_MINIMAP_VISIBLE) ? + L"Minimap hidden" : L"Minimap disabled by server"; + } + + *statustext_time = 0; + mapper->setMinimapMode(mode); +} void Game::toggleFog(float *statustext_time, bool *flag) { @@ -2908,7 +3015,7 @@ void Game::increaseViewRange(float *statustext_time) s16 range = g_settings->getS16("viewing_range_nodes_min"); s16 range_new = range + 10; g_settings->set("viewing_range_nodes_min", itos(range_new)); - statustext = narrow_to_wide("Minimum viewing range changed to " + statustext = utf8_to_wide("Minimum viewing range changed to " + itos(range_new)); *statustext_time = 0; } @@ -2923,7 +3030,7 @@ void Game::decreaseViewRange(float *statustext_time) range_new = range; g_settings->set("viewing_range_nodes_min", itos(range_new)); - statustext = narrow_to_wide("Minimum viewing range changed to " + statustext = utf8_to_wide("Minimum viewing range changed to " + itos(range_new)); *statustext_time = 0; } @@ -3315,6 +3422,7 @@ void Game::updateCamera(VolatileRunFlags *flags, u32 busy_time, camera->toggleCameraMode(); playercao->setVisible(camera->getCameraMode() > CAMERA_MODE_FIRST); + playercao->setChildrenVisible(camera->getCameraMode() > CAMERA_MODE_FIRST); } float full_punch_interval = playeritem_toolcap.full_punch_interval; @@ -3537,13 +3645,13 @@ void Game::handlePointingAtNode(GameRunData *runData, NodeMetadata *meta = map.getNodeMetadata(nodepos); if (meta) { - infotext = narrow_to_wide(meta->getString("infotext")); + infotext = utf8_to_wide(meta->getString("infotext")); } else { MapNode n = map.getNodeNoEx(nodepos); if (nodedef_manager->get(n).tiledef[0].name == "unknown_node.png") { infotext = L"Unknown node: "; - infotext += narrow_to_wide(nodedef_manager->get(n).name); + infotext += utf8_to_wide(nodedef_manager->get(n).name); } } @@ -3607,11 +3715,11 @@ void Game::handlePointingAtNode(GameRunData *runData, } else { soundmaker->m_player_rightpunch_sound = SimpleSoundSpec(); - } - if (playeritem_def.node_placement_prediction == "" || - nodedef_manager->get(map.getNodeNoEx(nodepos)).rightclickable) - client->interact(3, pointed); // Report to server + if (playeritem_def.node_placement_prediction == "" || + nodedef_manager->get(map.getNodeNoEx(nodepos)).rightclickable) + client->interact(3, pointed); // Report to server + } } } } @@ -3623,10 +3731,10 @@ void Game::handlePointingAtObject(GameRunData *runData, const v3f &player_position, bool show_debug) { - infotext = narrow_to_wide(runData->selected_object->infoText()); + infotext = utf8_to_wide(runData->selected_object->infoText()); if (infotext == L"" && show_debug) { - infotext = narrow_to_wide(runData->selected_object->debugInfoText()); + infotext = utf8_to_wide(runData->selected_object->debugInfoText()); } if (input->getLeftState()) { @@ -3984,8 +4092,9 @@ void Game::updateFrame(std::vector &highlight_boxes, stats->beginscenetime = timer.stop(true); } - draw_scene(driver, smgr, *camera, *client, player, *hud, guienv, - highlight_boxes, screensize, skycolor, flags.show_hud); + draw_scene(driver, smgr, *camera, *client, player, *hud, *mapper, + guienv, highlight_boxes, screensize, skycolor, flags.show_hud, + flags.show_minimap); /* Profiler graph @@ -4018,6 +4127,14 @@ void Game::updateFrame(std::vector &highlight_boxes, player->hurt_tilt_strength = 0; } + /* + Update minimap pos and rotation + */ + if (flags.show_minimap && flags.show_hud) { + mapper->setPos(floatToInt(player->getPosition(), BS)); + mapper->setAngle(player->getYaw()); + } + /* End scene */ @@ -4083,15 +4200,15 @@ void Game::updateGui(float *statustext_time, const RunStats &stats, << ", v_range = " << draw_control->wanted_range << std::setprecision(3) << ", RTT = " << client->getRTT(); - guitext->setText(narrow_to_wide(os.str()).c_str()); + guitext->setText(utf8_to_wide(os.str()).c_str()); guitext->setVisible(true); } else if (flags.show_hud || flags.show_chat) { #ifdef ANDROID guitext->setVisible(false); #else std::ostringstream os(std::ios_base::binary); - os << "MultiCraft " << g_version_hash; - guitext->setText(narrow_to_wide(os.str()).c_str()); + os << PROJECT_NAME_C " " << g_version_hash; + guitext->setText(utf8_to_wide(os.str()).c_str()); guitext->setVisible(true); #endif } else { @@ -4129,7 +4246,7 @@ void Game::updateGui(float *statustext_time, const RunStats &stats, } } - guitext2->setText(narrow_to_wide(os.str()).c_str()); + guitext2->setText(utf8_to_wide(os.str()).c_str()); guitext2->setVisible(true); core::rect rect( @@ -4252,6 +4369,23 @@ void Game::showOverlayMessage(const wchar_t *msg, float dtime, delete[] msg; } +void Game::settingChangedCallback(const std::string &setting_name, void *data) +{ + ((Game *)data)->readSettings(); +} + +void Game::readSettings() +{ + m_cache_doubletap_jump = g_settings->getBool("doubletap_jump"); + m_cache_enable_node_highlighting = g_settings->getBool("enable_node_highlighting"); + m_cache_enable_clouds = g_settings->getBool("enable_clouds"); + m_cache_enable_particles = g_settings->getBool("enable_particles"); + m_cache_enable_fog = g_settings->getBool("enable_fog"); + m_cache_mouse_sensitivity = g_settings->getFloat("mouse_sensitivity"); + m_repeat_right_click_time = g_settings->getFloat("repeat_rightclick_time"); + + m_cache_mouse_sensitivity = rangelim(m_cache_mouse_sensitivity, 0.001, 100.0); +} /****************************************************************************/ /**************************************************************************** @@ -4300,6 +4434,7 @@ void the_game(bool *kill, std::string &error_message, ChatBackend &chat_backend, + bool *reconnect_requested, const SubgameSpec &gamespec, // Used for local game bool simple_singleplayer_mode) { @@ -4314,8 +4449,8 @@ void the_game(bool *kill, try { if (game.startup(kill, random_input, input, device, map_dir, - playername, password, &server_address, port, - error_message, &chat_backend, gamespec, + playername, password, &server_address, port, error_message, + reconnect_requested, &chat_backend, gamespec, simple_singleplayer_mode)) { game.run(); game.shutdown(); @@ -4334,4 +4469,3 @@ void the_game(bool *kill, errorstream << "ModError: " << error_message << std::endl; } } - diff --git a/src/game.h b/src/game.h index ecc22c71..6f1fea3a 100644 --- a/src/game.h +++ b/src/game.h @@ -147,6 +147,7 @@ void the_game(bool *kill, u16 port, std::string &error_message, ChatBackend &chat_backend, + bool *reconnect_requested, const SubgameSpec &gamespec, // Used for local game bool simple_singleplayer_mode); diff --git a/src/gameparams.h b/src/gameparams.h index b925da07..8b7ab8c9 100644 --- a/src/gameparams.h +++ b/src/gameparams.h @@ -17,17 +17,18 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef __GAME_PARAMS_H__ -#define __GAME_PARAMS_H__ +#ifndef GAME_PARAMS_H +#define GAME_PARAMS_H -#include "irrlichttypes_extrabloated.h" +#include "irrlichttypes.h" + +struct SubgameSpec; struct GameParams { u16 socket_port; std::string world_path; SubgameSpec game_spec; bool is_dedicated_server; - int log_level; }; #endif diff --git a/src/genericobject.cpp b/src/genericobject.cpp index 7d87ea91..17e54103 100644 --- a/src/genericobject.cpp +++ b/src/genericobject.cpp @@ -110,7 +110,7 @@ std::string gob_cmd_update_armor_groups(const ItemGroupList &armor_groups) writeU8(os, GENERIC_CMD_UPDATE_ARMOR_GROUPS); writeU16(os, armor_groups.size()); for(ItemGroupList::const_iterator i = armor_groups.begin(); - i != armor_groups.end(); i++){ + i != armor_groups.end(); ++i){ os<first); writeS16(os, i->second); } @@ -133,7 +133,7 @@ std::string gob_cmd_update_physics_override(float physics_override_speed, float return os.str(); } -std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_blend) +std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_blend, bool frame_loop) { std::ostringstream os(std::ios::binary); // command @@ -142,6 +142,8 @@ std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_ writeV2F1000(os, frames); writeF1000(os, frame_speed); writeF1000(os, frame_blend); + // these are sent inverted so we get true when the server sends nothing + writeU8(os, !frame_loop); return os.str(); } @@ -161,7 +163,7 @@ std::string gob_cmd_update_attachment(int parent_id, std::string bone, v3f posit { std::ostringstream os(std::ios::binary); // command - writeU8(os, GENERIC_CMD_SET_ATTACHMENT); + writeU8(os, GENERIC_CMD_ATTACH_TO); // parameters writeS16(os, parent_id); os< -#define GENERIC_CMD_SET_PROPERTIES 0 -#define GENERIC_CMD_UPDATE_POSITION 1 -#define GENERIC_CMD_SET_TEXTURE_MOD 2 -#define GENERIC_CMD_SET_SPRITE 3 -#define GENERIC_CMD_PUNCHED 4 -#define GENERIC_CMD_UPDATE_ARMOR_GROUPS 5 -#define GENERIC_CMD_SET_ANIMATION 6 -#define GENERIC_CMD_SET_BONE_POSITION 7 -#define GENERIC_CMD_SET_ATTACHMENT 8 -#define GENERIC_CMD_SET_PHYSICS_OVERRIDE 9 -#define GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES 10 +enum GenericCMD { + GENERIC_CMD_SET_PROPERTIES, + GENERIC_CMD_UPDATE_POSITION, + GENERIC_CMD_SET_TEXTURE_MOD, + GENERIC_CMD_SET_SPRITE, + GENERIC_CMD_PUNCHED, + GENERIC_CMD_UPDATE_ARMOR_GROUPS, + GENERIC_CMD_SET_ANIMATION, + GENERIC_CMD_SET_BONE_POSITION, + GENERIC_CMD_ATTACH_TO, + GENERIC_CMD_SET_PHYSICS_OVERRIDE, + GENERIC_CMD_UPDATE_NAMETAG_ATTRIBUTES +}; #include "object_properties.h" std::string gob_cmd_set_properties(const ObjectProperties &prop); @@ -67,7 +69,7 @@ std::string gob_cmd_update_armor_groups(const ItemGroupList &armor_groups); std::string gob_cmd_update_physics_override(float physics_override_speed, float physics_override_jump, float physics_override_gravity, bool sneak, bool sneak_glitch); -std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_blend); +std::string gob_cmd_update_animation(v2f frames, float frame_speed, float frame_blend, bool frame_loop); std::string gob_cmd_update_bone_position(std::string bone, v3f position, v3f rotation); diff --git a/src/gettext.cpp b/src/gettext.cpp index df081388..f5485a89 100644 --- a/src/gettext.cpp +++ b/src/gettext.cpp @@ -102,8 +102,9 @@ const char* MSVC_LocaleLookup(const char* raw_shortname) { last_raw_value = shortname; - if (glb_supported_locales.find(narrow_to_wide(shortname)) != glb_supported_locales.end()) { - last_full_name = wide_to_narrow(glb_supported_locales[narrow_to_wide(shortname)]); + if (glb_supported_locales.find(utf8_to_wide(shortname)) != glb_supported_locales.end()) { + last_full_name = wide_to_utf8( + glb_supported_locales[utf8_to_wide(shortname)]); return last_full_name.c_str(); } @@ -116,107 +117,87 @@ const char* MSVC_LocaleLookup(const char* raw_shortname) { #endif /******************************************************************************/ -#ifdef _MSC_VER -void init_gettext(const char *path, const std::string &configured_language, int argc, char** argv) { -#else -void init_gettext(const char *path, const std::string &configured_language) { -#endif +void init_gettext(const char *path, const std::string &configured_language, + int argc, char *argv[]) +{ #if USE_GETTEXT - /** first try to set user override environment **/ - if (configured_language.length() != 0) { + // First, try to set user override environment + if (!configured_language.empty()) { #ifndef _WIN32 - /* add user specified locale to environment */ + // Add user specified locale to environment setenv("LANGUAGE", configured_language.c_str(), 1); - /* reload locale with changed environment */ + // Reload locale with changed environment setlocale(LC_ALL, ""); #elif defined(_MSC_VER) - std::string current_language_var(""); - if (getenv("LANGUAGE") != 0) { - current_language_var = std::string(getenv("LANGUAGE")); - } + std::string current_language; + const char *env_lang = getenv("LANGUAGE"); + if (env_lang) + current_language = env_lang; - char *lang_str = (char*)calloc(10 + configured_language.length(), sizeof(char)); - strcat(lang_str, "LANGUAGE="); - strcat(lang_str, configured_language.c_str()); - putenv(lang_str); - - SetEnvironmentVariableA("LANGUAGE",configured_language.c_str()); + _putenv(("LANGUAGE=" + configured_language).c_str()); + SetEnvironmentVariableA("LANGUAGE", configured_language.c_str()); #ifndef SERVER - //very very dirty workaround to force gettext to see the right environment - if (current_language_var != configured_language) { - STARTUPINFO startupinfo; - PROCESS_INFORMATION processinfo; - memset(&startupinfo, 0, sizeof(startupinfo)); - memset(&processinfo, 0, sizeof(processinfo)); - errorstream << "MSVC localization workaround active restating minetest in new environment!" << std::endl; + // Hack to force gettext to see the right environment + if (current_language != configured_language) { + errorstream << "MSVC localization workaround active. " + "Restarting " PROJECT_NAME_C " in a new environment!" << std::endl; - std::string parameters = ""; + std::string parameters; + + for (unsigned int i = 1; i < argc; i++) { + if (!parameters.empty()) + parameters += ' '; - for (unsigned int i=1;i < argc; i++) { - if (parameters != "") { - parameters += " "; - } parameters += argv[i]; } - const char* ptr_parameters = 0; + const char *ptr_parameters = NULL; - if (parameters != "") { + if (!parameters.empty()) ptr_parameters = parameters.c_str(); - } - - /** users may start by short name in commandline without extention **/ - std::string appname = argv[0]; - if (appname.substr(appname.length() - 4) != ".exe") { - appname += ".exe"; - } - if (!CreateProcess(appname.c_str(), - (char*) ptr_parameters, - NULL, - NULL, - false, - DETACHED_PROCESS | CREATE_UNICODE_ENVIRONMENT, - NULL, - NULL, - &startupinfo, - &processinfo)) { - char buffer[1024]; - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - GetLastError(), - MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), - buffer, - sizeof(buffer)-1, - NULL); + // Allow calling without an extension + std::string app_name = argv[0]; + if (app_name.compare(app_name.size() - 4, 4, ".exe") != 0) + app_name += ".exe"; + + STARTUPINFO startup_info = {0}; + PROCESS_INFORMATION process_info = {0}; + + bool success = CreateProcess(app_name.c_str(), (char *)ptr_parameters, + NULL, NULL, false, DETACHED_PROCESS | CREATE_UNICODE_ENVIRONMENT, + NULL, NULL, &startup_info, &process_info); + + if (success) { + exit(0); + // NOTREACHED + } else { + char buffer[1024]; + + FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), + MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), buffer, + sizeof(buffer) - 1, NULL); + errorstream << "*******************************************************" << std::endl; - errorstream << "CMD: " << appname << std::endl; + errorstream << "CMD: " << app_name << std::endl; errorstream << "Failed to restart with current locale: " << std::endl; errorstream << buffer; errorstream << "Expect language to be broken!" << std::endl; errorstream << "*******************************************************" << std::endl; } - else { - exit(0); - } -#else - errorstream << "*******************************************************" << std::endl; - errorstream << "Can't apply locale workaround for server!" << std::endl; - errorstream << "Expect language to be broken!" << std::endl; - errorstream << "*******************************************************" << std::endl; - -#endif } +#else + errorstream << "*******************************************************" << std::endl; + errorstream << "Can't apply locale workaround for server!" << std::endl; + errorstream << "Expect language to be broken!" << std::endl; + errorstream << "*******************************************************" << std::endl; +#endif - setlocale(LC_ALL,configured_language.c_str()); + setlocale(LC_ALL, configured_language.c_str()); #else // Mingw - char *lang_str = (char*)calloc(10 + configured_language.length(), sizeof(char)); - strcat(lang_str, "LANGUAGE="); - strcat(lang_str, configured_language.c_str()); - putenv(lang_str); - + _putenv(("LANGUAGE=" + configured_language).c_str()); setlocale(LC_ALL, ""); #endif // ifndef _WIN32 } @@ -265,4 +246,3 @@ void init_gettext(const char *path, const std::string &configured_language) { infostream << "Message locale is now set to: " << setlocale(LC_ALL, 0) << std::endl; } - diff --git a/src/gettext.h b/src/gettext.h index 39ee79a2..75aa9af1 100644 --- a/src/gettext.h +++ b/src/gettext.h @@ -32,28 +32,16 @@ with this program; if not, write to the Free Software Foundation, Inc., #define gettext_noop(String) (String) #define N_(String) gettext_noop((String)) -#ifdef _MSC_VER void init_gettext(const char *path, const std::string &configured_language, - int argc, char** argv); -#else -void init_gettext(const char *path, const std::string &configured_language); -#endif + int argc, char *argv[]); -extern wchar_t *narrow_to_wide_c(const char *str); +extern wchar_t *utf8_to_wide_c(const char *str); // You must free the returned string! // The returned string is allocated using new inline const wchar_t *wgettext(const char *str) { - return narrow_to_wide_c(gettext(str)); -} - -inline std::wstring wstrgettext(const std::string &text) -{ - const wchar_t *tmp = wgettext(text.c_str()); - std::wstring retval = (std::wstring)tmp; - delete[] tmp; - return retval; + return utf8_to_wide_c(gettext(str)); } inline std::string strgettext(const std::string &text) diff --git a/src/guiEngine.cpp b/src/guiEngine.cpp index 71fc6921..76a8ecf6 100644 --- a/src/guiEngine.cpp +++ b/src/guiEngine.cpp @@ -61,7 +61,7 @@ void TextDestGuiEngine::gotText(const StringMap &fields) /******************************************************************************/ void TextDestGuiEngine::gotText(std::wstring text) { - m_engine->getScriptIface()->handleMainMenuEvent(wide_to_narrow(text)); + m_engine->getScriptIface()->handleMainMenuEvent(wide_to_utf8(text)); } /******************************************************************************/ @@ -172,7 +172,9 @@ GUIEngine::GUIEngine( irr::IrrlichtDevice* dev, m_sound_manager = &dummySoundManager; //create topleft header - std::wstring t = narrow_to_wide(std::string("")); // = narrow_to_wide(std::string("MultiCraft ") + g_version_hash); + std::wstring t = narrow_to_wide(std::string("")); + //std::wstring t = utf8_to_wide(std::string(PROJECT_NAME_C " ") + + //g_version_hash); core::rect rect(0, 0, g_fontengine->getTextWidth(t), g_fontengine->getTextHeight()); rect += v2s32(4, 0); @@ -207,10 +209,8 @@ GUIEngine::GUIEngine( irr::IrrlichtDevice* dev, m_script = new MainMenuScripting(this); try { - if (m_data->errormessage != "") { - m_script->setMainMenuErrorMessage(m_data->errormessage); - m_data->errormessage = ""; - } + m_script->setMainMenuData(&m_data->script_data); + m_data->script_data.errormessage = ""; if (!loadMainMenuScript()) { errorstream << "No future without mainmenu" << std::endl; @@ -218,10 +218,9 @@ GUIEngine::GUIEngine( irr::IrrlichtDevice* dev, } run(); - } - catch(LuaError &e) { + } catch (LuaError &e) { errorstream << "MAINMENU ERROR: " << e.what() << std::endl; - m_data->errormessage = e.what(); + m_data->script_data.errormessage = e.what(); } m_menu->quitMenu(); @@ -240,13 +239,13 @@ bool GUIEngine::loadMainMenuScript() } std::string script = porting::path_share + DIR_DELIM "builtin" + DIR_DELIM "init.lua"; - if (m_script->loadScript(script)) { + try { + m_script->loadScript(script); // Menu script loaded return true; - } else { - infostream - << "GUIEngine: execution of menu script in: \"" - << m_scriptdir << "\" failed!" << std::endl; + } catch (const ModError &e) { + errorstream << "GUIEngine: execution of menu script failed: " + << e.what() << std::endl; } return false; @@ -571,13 +570,13 @@ bool GUIEngine::downloadFile(std::string url, std::string target) /******************************************************************************/ void GUIEngine::setTopleftText(std::string append) { - std::wstring toset = narrow_to_wide(std::string(PROJECT_NAME_C " ") + - g_version_hash); + std::wstring toset = utf8_to_wide(std::string(PROJECT_NAME_C " ") + + g_version_hash); if (append != "") { toset += L" / "; - toset += narrow_to_wide(append); + toset += utf8_to_wide(append); } m_irr_toplefttext->setText(toset.c_str()); diff --git a/src/guiFileSelectMenu.cpp b/src/guiFileSelectMenu.cpp index 7ffc549e..b0a4677c 100644 --- a/src/guiFileSelectMenu.cpp +++ b/src/guiFileSelectMenu.cpp @@ -26,7 +26,7 @@ GUIFileSelectMenu::GUIFileSelectMenu(gui::IGUIEnvironment* env, std::string title, std::string formname) : GUIModalMenu(env, parent, id, menumgr) { - m_title = narrow_to_wide(title); + m_title = utf8_to_wide(title); m_parent = parent; m_formname = formname; m_text_dst = 0; @@ -87,7 +87,7 @@ void GUIFileSelectMenu::acceptInput() { StringMap fields; if (m_accepted) - fields[m_formname + "_accepted"] = wide_to_narrow(m_fileOpenDialog->getFileName()); + fields[m_formname + "_accepted"] = wide_to_utf8(m_fileOpenDialog->getFileName()); else fields[m_formname + "_canceled"] = m_formname; diff --git a/src/guiFormSpecMenu.cpp b/src/guiFormSpecMenu.cpp index 2845a0e2..c31169c3 100644 --- a/src/guiFormSpecMenu.cpp +++ b/src/guiFormSpecMenu.cpp @@ -52,6 +52,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/string.h" // for parseColorString() #include "guiscalingfilter.h" +#if USE_FREETYPE && IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9 +#include "intlGUIEditBox.h" +#endif + #define MY_CHECKPOS(a,b) \ if (v_pos.size() != 2) { \ errorstream<< "Invalid pos for element " << a << "specified: \"" \ @@ -96,11 +100,11 @@ GUIFormSpecMenu::GUIFormSpecMenu(irr::IrrlichtDevice* dev, m_form_src(fsrc), m_text_dst(tdst), m_formspec_version(0), - m_focused_element(L""), + m_focused_element(""), m_font(NULL), m_remap_dbl_click(remap_dbl_click) #ifdef __ANDROID__ - ,m_JavaDialogFieldName(L"") + , m_JavaDialogFieldName("") #endif { current_keys_pending.key_down = false; @@ -227,7 +231,7 @@ void GUIFormSpecMenu::setInitialFocus() Environment->setFocus(*(children.begin())); } -GUITable* GUIFormSpecMenu::getTable(std::wstring tablename) +GUITable* GUIFormSpecMenu::getTable(const std::string &tablename) { for (u32 i = 0; i < m_tables.size(); ++i) { if (tablename == m_tables[i].first.fname) @@ -236,28 +240,27 @@ GUITable* GUIFormSpecMenu::getTable(std::wstring tablename) return 0; } -std::vector split(const std::string &s, char delim) { +static std::vector split(const std::string &s, char delim) +{ std::vector tokens; std::string current = ""; bool last_was_escape = false; - for(unsigned int i=0; i < s.size(); i++) { + for (unsigned int i = 0; i < s.size(); i++) { + char si = s.c_str()[i]; if (last_was_escape) { current += '\\'; - current += s.c_str()[i]; + current += si; last_was_escape = false; - } - else { - if (s.c_str()[i] == delim) { + } else { + if (si == delim) { tokens.push_back(current); current = ""; last_was_escape = false; - } - else if (s.c_str()[i] == '\\'){ + } else if (si == '\\') { last_was_escape = true; - } - else { - current += s.c_str()[i]; + } else { + current += si; last_was_escape = false; } } @@ -297,7 +300,7 @@ void GUIFormSpecMenu::parseSize(parserData* data,std::string element) void GUIFormSpecMenu::parseList(parserData* data,std::string element) { if (m_gamedef == 0) { - errorstream<<"WARNING: invalid use of 'list' with m_gamedef==0"<explicit_size) - errorstream<<"WARNING: invalid use of list without a size[] element"< parts = split(element, ';'); + + if (parts.size() == 2) { + std::string location = parts[0]; + std::string listname = parts[1]; + + InventoryLocation loc; + + if (location == "context" || location == "current_name") + loc = m_current_inventory_location; + else + loc.deSerialize(location); + + m_inventory_rings.push_back(ListRingSpec(loc, listname)); + return; + } else if ((element == "") && (m_inventorylists.size() > 1)) { + size_t siz = m_inventorylists.size(); + // insert the last two inv list elements into the list ring + const ListDrawSpec &spa = m_inventorylists[siz - 2]; + const ListDrawSpec &spb = m_inventorylists[siz - 1]; + m_inventory_rings.push_back(ListRingSpec(spa.inventoryloc, spa.listname)); + m_inventory_rings.push_back(ListRingSpec(spb.inventoryloc, spb.listname)); + return; + } + errorstream<< "Invalid list ring element(" << parts.size() << ", " + << m_inventorylists.size() << "): '" << element << "'" << std::endl; +} + void GUIFormSpecMenu::parseCheckbox(parserData* data,std::string element) { std::vector parts = split(element,';'); @@ -375,7 +413,7 @@ void GUIFormSpecMenu::parseCheckbox(parserData* data,std::string element) if (selected == "true") fselected = true; - std::wstring wlabel = narrow_to_wide(label); + std::wstring wlabel = utf8_to_wide(label); core::rect rect = core::rect( pos.X, pos.Y + ((imgsize.Y/2) - m_btn_height), @@ -383,7 +421,7 @@ void GUIFormSpecMenu::parseCheckbox(parserData* data,std::string element) pos.Y + ((imgsize.Y/2) + m_btn_height)); FieldSpec spec( - narrow_to_wide(name), + name, wlabel, //Needed for displaying text on MSVC wlabel, 258+m_fields.size() @@ -435,7 +473,7 @@ void GUIFormSpecMenu::parseScrollBar(parserData* data, std::string element) core::rect(pos.X, pos.Y, pos.X + dim.X, pos.Y + dim.Y); FieldSpec spec( - narrow_to_wide(name), + name, L"", L"", 258+m_fields.size() @@ -487,7 +525,7 @@ void GUIFormSpecMenu::parseImage(parserData* data,std::string element) geom.Y = stof(v_geom[1]) * (float)imgsize.Y; if(!data->explicit_size) - errorstream<<"WARNING: invalid use of image without a size[] element"<explicit_size) - errorstream<<"WARNING: invalid use of image without a size[] element"<explicit_size) - errorstream<<"WARNING: invalid use of item_image without a size[] element"<explicit_size) - errorstream<<"WARNING: invalid use of button without a size[] element"<explicit_size) - errorstream<<"WARNING: invalid use of background without a size[] element"< rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); - std::wstring fname_w = narrow_to_wide(name); - FieldSpec spec( - fname_w, + name, L"", L"", 258+m_fields.size() @@ -723,8 +759,8 @@ void GUIFormSpecMenu::parseTable(parserData* data,std::string element) e->setTable(data->table_options, data->table_columns, items); - if (data->table_dyndata.find(fname_w) != data->table_dyndata.end()) { - e->setDynamicData(data->table_dyndata[fname_w]); + if (data->table_dyndata.find(name) != data->table_dyndata.end()) { + e->setDynamicData(data->table_dyndata[name]); } if ((str_initial_selection != "") && @@ -772,10 +808,8 @@ void GUIFormSpecMenu::parseTextList(parserData* data,std::string element) core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); - std::wstring fname_w = narrow_to_wide(name); - FieldSpec spec( - fname_w, + name, L"", L"", 258+m_fields.size() @@ -797,8 +831,8 @@ void GUIFormSpecMenu::parseTextList(parserData* data,std::string element) e->setTextList(items, is_yes(str_transparent)); - if (data->table_dyndata.find(fname_w) != data->table_dyndata.end()) { - e->setDynamicData(data->table_dyndata[fname_w]); + if (data->table_dyndata.find(name) != data->table_dyndata.end()) { + e->setDynamicData(data->table_dyndata[name]); } if ((str_initial_selection != "") && @@ -837,10 +871,8 @@ void GUIFormSpecMenu::parseDropDown(parserData* data,std::string element) core::rect rect = core::rect(pos.X, pos.Y, pos.X + width, pos.Y + (m_btn_height * 2)); - std::wstring fname_w = narrow_to_wide(name); - FieldSpec spec( - fname_w, + name, L"", L"", 258+m_fields.size() @@ -857,7 +889,7 @@ void GUIFormSpecMenu::parseDropDown(parserData* data,std::string element) } for (unsigned int i=0; i < items.size(); i++) { - e->addItem(narrow_to_wide(items[i]).c_str()); + e->addItem(utf8_to_wide(items[i]).c_str()); } if (str_initial_selection != "") @@ -900,10 +932,10 @@ void GUIFormSpecMenu::parsePwdField(parserData* data,std::string element) label = unescape_string(label); - std::wstring wlabel = narrow_to_wide(label); + std::wstring wlabel = utf8_to_wide(label); FieldSpec spec( - narrow_to_wide(name), + name, wlabel, L"", 258+m_fields.size() @@ -950,7 +982,7 @@ void GUIFormSpecMenu::parseSimpleField(parserData* data, core::rect rect; if(data->explicit_size) - errorstream<<"WARNING: invalid use of unpositioned \"field\" in inventory"<addEditBox(spec.fdefault.c_str(), rect, true, this, spec.fid); - + gui::IGUIElement *e; +#if USE_FREETYPE && IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9 + if (g_settings->getBool("freetype")) { + e = (gui::IGUIElement *) new gui::intlGUIEditBox(spec.fdefault.c_str(), + true, Environment, this, spec.fid, rect); + e->drop(); + } else { +#else + { +#endif + e = Environment->addEditBox(spec.fdefault.c_str(), rect, true, this, spec.fid); + } if (spec.fname == data->focused_fieldname) { Environment->setFocus(e); } @@ -1047,7 +1088,7 @@ void GUIFormSpecMenu::parseTextArea(parserData* data, core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); if(!data->explicit_size) - errorstream<<"WARNING: invalid use of positioned "<resolveText(default_val); @@ -1056,12 +1097,12 @@ void GUIFormSpecMenu::parseTextArea(parserData* data, default_val = unescape_string(default_val); label = unescape_string(label); - std::wstring wlabel = narrow_to_wide(label); + std::wstring wlabel = utf8_to_wide(label); FieldSpec spec( - narrow_to_wide(name), + name, wlabel, - narrow_to_wide(default_val), + utf8_to_wide(default_val), 258+m_fields.size() ); @@ -1073,8 +1114,19 @@ void GUIFormSpecMenu::parseTextArea(parserData* data, else { spec.send = true; - gui::IGUIEditBox *e = - Environment->addEditBox(spec.fdefault.c_str(), rect, true, this, spec.fid); + + gui::IGUIEditBox *e; +#if USE_FREETYPE && IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9 + if (g_settings->getBool("freetype")) { + e = (gui::IGUIEditBox *) new gui::intlGUIEditBox(spec.fdefault.c_str(), + true, Environment, this, spec.fid, rect); + e->drop(); + } else { +#else + { +#endif + e = Environment->addEditBox(spec.fdefault.c_str(), rect, true, this, spec.fid); + } if (spec.fname == data->focused_fieldname) { Environment->setFocus(e); @@ -1143,7 +1195,7 @@ void GUIFormSpecMenu::parseLabel(parserData* data,std::string element) pos.Y += (stof(v_pos[1]) + 7.0/30.0) * (float)spacing.Y; if(!data->explicit_size) - errorstream<<"WARNING: invalid use of label without a size[] element"< lines = split(text, '\n'); @@ -1159,13 +1211,13 @@ void GUIFormSpecMenu::parseLabel(parserData* data,std::string element) // in the integer cases: 0.4 is not exactly // representable in binary floating point. s32 posy = pos.Y + ((float)i) * spacing.Y * 2.0 / 5.0; - std::wstring wlabel = narrow_to_wide(lines[i]); + std::wstring wlabel = utf8_to_wide(lines[i]); core::rect rect = core::rect( pos.X, posy - m_btn_height, pos.X + m_font->getDimension(wlabel.c_str()).Width, posy + m_btn_height); FieldSpec spec( - L"", + "", wlabel, L"", 258+m_fields.size() @@ -1191,7 +1243,7 @@ void GUIFormSpecMenu::parseVertLabel(parserData* data,std::string element) ((parts.size() > 2) && (m_formspec_version > FORMSPEC_API_VERSION))) { std::vector v_pos = split(parts[0],','); - std::wstring text = narrow_to_wide(unescape_string(parts[1])); + std::wstring text = utf8_to_wide(unescape_string(parts[1])); MY_CHECKPOS("vertlabel",1); @@ -1208,7 +1260,7 @@ void GUIFormSpecMenu::parseVertLabel(parserData* data,std::string element) //actually text.length() would be correct but adding +1 avoids to break all mods if(!data->explicit_size) - errorstream<<"WARNING: invalid use of label without a size[] element"< rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); if(!data->explicit_size) - errorstream<<"WARNING: invalid use of image_button without a size[] element"<setNotClipped(true); - for (unsigned int i=0; i< buttons.size(); i++) { - e->addTab(narrow_to_wide(buttons[i]).c_str(), -1); + for (unsigned int i = 0; i < buttons.size(); i++) { + e->addTab(utf8_to_wide(buttons[i]).c_str(), -1); } if ((tab_index >= 0) && @@ -1397,9 +1449,8 @@ void GUIFormSpecMenu::parseItemImageButton(parserData* data,std::string element) { if (m_gamedef == 0) { - errorstream << - "WARNING: invalid use of item_image_button with m_gamedef==0" - << std::endl; + warningstream << "invalid use of item_image_button with m_gamedef==0" + << std::endl; return; } @@ -1427,24 +1478,24 @@ void GUIFormSpecMenu::parseItemImageButton(parserData* data,std::string element) core::rect rect = core::rect(pos.X, pos.Y, pos.X+geom.X, pos.Y+geom.Y); if(!data->explicit_size) - errorstream<<"WARNING: invalid use of item_image_button without a size[] element"<idef(); ItemStack item; item.deSerialize(item_name, idef); video::ITexture *texture = idef->getInventoryTexture(item.getDefinition(idef).name, m_gamedef); - m_tooltips[narrow_to_wide(name)] = + m_tooltips[name] = TooltipSpec(item.getDefinition(idef).description, m_default_tooltip_bgcolor, m_default_tooltip_color); label = unescape_string(label); FieldSpec spec( - narrow_to_wide(name), - narrow_to_wide(label), - narrow_to_wide(item_name), - 258+m_fields.size() + name, + utf8_to_wide(label), + utf8_to_wide(item_name), + 258 + m_fields.size() ); gui::IGUIButton *e = Environment->addButton(rect, this, spec.fid, spec.flabel.c_str()); @@ -1553,14 +1604,14 @@ void GUIFormSpecMenu::parseTooltip(parserData* data, std::string element) std::vector parts = split(element,';'); if (parts.size() == 2) { std::string name = parts[0]; - m_tooltips[narrow_to_wide(name)] = TooltipSpec(unescape_string(parts[1]), + m_tooltips[name] = TooltipSpec(unescape_string(parts[1]), m_default_tooltip_bgcolor, m_default_tooltip_color); return; } else if (parts.size() == 4) { std::string name = parts[0]; video::SColor tmp_color1, tmp_color2; if ( parseColorString(parts[2], tmp_color1, false) && parseColorString(parts[3], tmp_color2, false) ) { - m_tooltips[narrow_to_wide(name)] = TooltipSpec(unescape_string(parts[1]), + m_tooltips[name] = TooltipSpec(unescape_string(parts[1]), tmp_color1, tmp_color2); return; } @@ -1646,6 +1697,11 @@ void GUIFormSpecMenu::parseElement(parserData* data, std::string element) return; } + if (type == "listring") { + parseListRing(data, description); + return; + } + if (type == "checkbox") { parseCheckbox(data,description); return; @@ -1773,7 +1829,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) //preserve tables for (u32 i = 0; i < m_tables.size(); ++i) { - std::wstring tablename = m_tables[i].first.fname; + std::string tablename = m_tables[i].first.fname; GUITable *table = m_tables[i].second; mydata.table_dyndata[tablename] = table->getDynamicData(); } @@ -1823,6 +1879,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) m_fields.clear(); m_boxes.clear(); m_tooltips.clear(); + m_inventory_rings.clear(); // Set default values (fits old formspec values) m_bgcolor = video::SColor(140,0,0,0); @@ -2028,7 +2085,7 @@ void GUIFormSpecMenu::regenerateGui(v2u32 screensize) bool GUIFormSpecMenu::getAndroidUIInput() { /* no dialog shown */ - if (m_JavaDialogFieldName == L"") { + if (m_JavaDialogFieldName == "") { return false; } @@ -2037,8 +2094,8 @@ bool GUIFormSpecMenu::getAndroidUIInput() return true; } - std::wstring fieldname = m_JavaDialogFieldName; - m_JavaDialogFieldName = L""; + std::string fieldname = m_JavaDialogFieldName; + m_JavaDialogFieldName = ""; /* no value abort dialog processing */ if (porting::getInputDialogState() != 0) { @@ -2046,7 +2103,7 @@ bool GUIFormSpecMenu::getAndroidUIInput() } for(std::vector::iterator iter = m_fields.begin(); - iter != m_fields.end(); iter++) { + iter != m_fields.end(); ++iter) { if (iter->fname != fieldname) { continue; @@ -2064,7 +2121,7 @@ bool GUIFormSpecMenu::getAndroidUIInput() std::string text = porting::getInputDialogValue(); ((gui::IGUIEditBox*) tochange)-> - setText(narrow_to_wide(text).c_str()); + setText(utf8_to_wide(text).c_str()); } return false; } @@ -2100,7 +2157,7 @@ void GUIFormSpecMenu::drawList(const ListDrawSpec &s, int phase) Inventory *inv = m_invmgr->getInventory(s.inventoryloc); if(!inv){ - infostream<<"GUIFormSpecMenu::drawList(): WARNING: " + warningstream<<"GUIFormSpecMenu::drawList(): " <<"The inventory location " <<"\""<getList(s.listname); if(!ilist){ - infostream<<"GUIFormSpecMenu::drawList(): WARNING: " + warningstream<<"GUIFormSpecMenu::drawList(): " <<"The inventory list \""<setOverrideColor(m_default_tooltip_color); m_tooltip_element->setVisible(true); this->bringToFront(m_tooltip_element); - m_tooltip_element->setText(narrow_to_wide(tooltip_text).c_str()); + m_tooltip_element->setText(utf8_to_wide(tooltip_text).c_str()); s32 tooltip_width = m_tooltip_element->getTextWidth() + m_btn_height; s32 tooltip_height = m_tooltip_element->getTextHeight() * tt_rows.size() + 5; v2u32 screenSize = driver->getScreenSize(); @@ -2416,11 +2473,11 @@ void GUIFormSpecMenu::drawMenu() if (id != -1 && delta >= m_tooltip_show_delay) { for(std::vector::iterator iter = m_fields.begin(); - iter != m_fields.end(); iter++) { + iter != m_fields.end(); ++iter) { if ( (iter->fid == id) && (m_tooltips[iter->fname].tooltip != "") ){ if (m_old_tooltip != m_tooltips[iter->fname].tooltip) { m_old_tooltip = m_tooltips[iter->fname].tooltip; - m_tooltip_element->setText(narrow_to_wide(m_tooltips[iter->fname].tooltip).c_str()); + m_tooltip_element->setText(utf8_to_wide(m_tooltips[iter->fname].tooltip).c_str()); std::vector tt_rows = str_split(m_tooltips[iter->fname].tooltip, '\n'); s32 tooltip_width = m_tooltip_element->getTextWidth() + m_btn_height; s32 tooltip_height = m_tooltip_element->getTextHeight() * tt_rows.size() + 5; @@ -2614,11 +2671,10 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no) for(unsigned int i=0; icheckEvent(); @@ -2635,7 +2691,7 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no) s32 selected = e->getSelected(); if (selected >= 0) { fields[name] = - wide_to_narrow(e->getItem(selected)); + wide_to_utf8(e->getItem(selected)); } } else if (s.ftype == f_TabHeader) { @@ -2691,7 +2747,7 @@ void GUIFormSpecMenu::acceptInput(FormspecQuitMode quitmode=quit_mode_no) { IGUIElement* e = getElementFromId(s.fid); if(e != NULL) { - fields[name] = wide_to_narrow(e->getText()); + fields[name] = wide_to_utf8(e->getText()); } } } @@ -2799,7 +2855,7 @@ bool GUIFormSpecMenu::preprocessEvent(const SEvent& event) } m_JavaDialogFieldName = getNameByID(hovered->getID()); std::string message = gettext("Enter "); - std::string label = wide_to_narrow(getLabelByID(hovered->getID())); + std::string label = wide_to_utf8(getLabelByID(hovered->getID())); if (label == "") { label = "text"; } @@ -2819,7 +2875,7 @@ bool GUIFormSpecMenu::preprocessEvent(const SEvent& event) } porting::showInputDialog(gettext("ok"), "", - wide_to_narrow(((gui::IGUIEditBox*) hovered)->getText()), + wide_to_utf8(((gui::IGUIEditBox*) hovered)->getText()), type); return retval; } @@ -2998,21 +3054,21 @@ bool GUIFormSpecMenu::DoubleClickDetection(const SEvent event) bool GUIFormSpecMenu::OnEvent(const SEvent& event) { - if(event.EventType==EET_KEY_INPUT_EVENT) { + if (event.EventType==EET_KEY_INPUT_EVENT) { KeyPress kp(event.KeyInput); if (event.KeyInput.PressedDown && ( (kp == EscapeKey) || - (kp == getKeySetting("keymap_inventory")) || (kp == CancelKey))) { + (kp == getKeySetting("keymap_inventory")) || (kp == CancelKey))) { if (m_allowclose) { doPause = false; acceptInput(quit_mode_cancel); quitMenu(); } else { - m_text_dst->gotText(narrow_to_wide("MenuQuit")); + m_text_dst->gotText(L"MenuQuit"); } return true; } else if (m_client != NULL && event.KeyInput.PressedDown && - (kp == getKeySetting("keymap_screenshot"))) { - m_client->makeScreenshot(m_device); + (kp == getKeySetting("keymap_screenshot"))) { + m_client->makeScreenshot(m_device); } if (event.KeyInput.PressedDown && (event.KeyInput.Key==KEY_RETURN || @@ -3063,8 +3119,9 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) Inventory *inv_selected = NULL; Inventory *inv_s = NULL; + InventoryList *list_s = NULL; - if(m_selected_item) { + if (m_selected_item) { inv_selected = m_invmgr->getInventory(m_selected_item->inventoryloc); sanity_check(inv_selected); sanity_check(inv_selected->getList(m_selected_item->listname) != NULL); @@ -3072,35 +3129,35 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) u32 s_count = 0; - if(s.isValid()) + if (s.isValid()) do { // breakable inv_s = m_invmgr->getInventory(s.inventoryloc); - if(!inv_s) { - errorstream<<"InventoryMenu: The selected inventory location " - <<"\""<getList(s.listname); - if(list == NULL) { - verbosestream<<"InventoryMenu: The selected inventory list \"" - <getList(s.listname); + if (list_s == NULL) { + verbosestream << "InventoryMenu: The selected inventory list \"" + << s.listname << "\" does not exist" << std::endl; s.i = -1; // make it invalid again break; } - if((u32)s.i >= list->getSize()) { - infostream<<"InventoryMenu: The selected inventory list \"" - <= list_s->getSize()) { + infostream << "InventoryMenu: The selected inventory list \"" + << s.listname << "\" is too small (i=" << s.i << ", size=" + << list_s->getSize() << ")" << std::endl; s.i = -1; // make it invalid again break; } - s_count = list->getItem(s.i).count; + s_count = list_s->getItem(s.i).count; } while(0); bool identical = (m_selected_item != NULL) && s.isValid() && @@ -3112,25 +3169,29 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) // up/down: 0 = down (press), 1 = up (release), 2 = unknown event, -1 movement int button = 0; int updown = 2; - if(event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) + if (event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN) { button = 0; updown = 0; } - else if(event.MouseInput.Event == EMIE_RMOUSE_PRESSED_DOWN) + else if (event.MouseInput.Event == EMIE_RMOUSE_PRESSED_DOWN) { button = 1; updown = 0; } - else if(event.MouseInput.Event == EMIE_MMOUSE_PRESSED_DOWN) + else if (event.MouseInput.Event == EMIE_MMOUSE_PRESSED_DOWN) { button = 2; updown = 0; } - else if(event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP) + else if (event.MouseInput.Event == EMIE_LMOUSE_LEFT_UP) { button = 0; updown = 1; } - else if(event.MouseInput.Event == EMIE_RMOUSE_LEFT_UP) + else if (event.MouseInput.Event == EMIE_RMOUSE_LEFT_UP) { button = 1; updown = 1; } - else if(event.MouseInput.Event == EMIE_MMOUSE_LEFT_UP) + else if (event.MouseInput.Event == EMIE_MMOUSE_LEFT_UP) { button = 2; updown = 1; } - else if(event.MouseInput.Event == EMIE_MOUSE_MOVED) + else if (event.MouseInput.Event == EMIE_MOUSE_MOVED) { updown = -1;} // Set this number to a positive value to generate a move action // from m_selected_item to s. u32 move_amount = 0; + // Set this number to a positive value to generate a move action + // from s to the next inventory ring. + u32 shift_move_amount = 0; + // Set this number to a positive value to generate a drop action // from m_selected_item. u32 drop_amount = 0; @@ -3138,7 +3199,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) // Set this number to a positive value to generate a craft action at s. u32 craft_amount = 0; - if(updown == 0) { + if (updown == 0) { // Some mouse button has been pressed //infostream<<"Mouse button "<= 1); - if(s.isValid()) { + if (s.isValid()) { // Clicked a slot: move - if(button == 1) // right + if (button == 1) // right move_amount = 1; - else if(button == 2) // middle + else if (button == 2) // middle move_amount = MYMIN(m_selected_amount, 10); else // left move_amount = m_selected_amount; - if(identical) { - if(move_amount >= m_selected_amount) + if (identical) { + if (move_amount >= m_selected_amount) m_selected_amount = 0; else m_selected_amount -= move_amount; @@ -3188,29 +3258,28 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } else if (!getAbsoluteClippingRect().isPointInside(m_pointer)) { // Clicked outside of the window: drop - if(button == 1) // right + if (button == 1) // right drop_amount = 1; - else if(button == 2) // middle + else if (button == 2) // middle drop_amount = MYMIN(m_selected_amount, 10); else // left drop_amount = m_selected_amount; } } } - else if(updown == 1) { + else if (updown == 1) { // Some mouse button has been released //infostream<<"Mouse button "<getList(m_selected_item->listname); - InventoryList *list_to = inv_s->getList(s.listname); + InventoryList *list_to = list_s; assert(list_from && list_to); ItemStack stack_from = list_from->getItem(m_selected_item->i); ItemStack stack_to = list_to->getItem(s.i); @@ -3245,8 +3313,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } // Possibly send inventory action to server - if(move_amount > 0) - { + if (move_amount > 0) { // Send IACTION_MOVE assert(m_selected_item && m_selected_item->isValid()); @@ -3254,7 +3321,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) assert(inv_selected && inv_s); InventoryList *list_from = inv_selected->getList(m_selected_item->listname); - InventoryList *list_to = inv_s->getList(s.listname); + InventoryList *list_to = list_s; assert(list_from && list_to); ItemStack stack_from = list_from->getItem(m_selected_item->i); ItemStack stack_to = list_to->getItem(s.i); @@ -3273,7 +3340,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) m_selected_content_guess_inventory = s.inventoryloc; } // Source stack goes fully into destination stack - else if(leftover.empty()) { + else if (leftover.empty()) { m_selected_amount -= move_amount; m_selected_content_guess = ItemStack(); // Clear } @@ -3284,7 +3351,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) m_selected_content_guess = ItemStack(); // Clear } - infostream<<"Handing IACTION_MOVE to manager"<count = move_amount; a->from_inv = m_selected_item->inventoryloc; @@ -3294,8 +3361,68 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) a->to_list = s.listname; a->to_i = s.i; m_invmgr->inventoryAction(a); - } - else if(drop_amount > 0) { + } else if (shift_move_amount > 0) { + u32 mis = m_inventory_rings.size(); + u32 i = 0; + for (; i < mis; i++) { + const ListRingSpec &sp = m_inventory_rings[i]; + if (sp.inventoryloc == s.inventoryloc + && sp.listname == s.listname) + break; + } + do { + if (i >= mis) // if not found + break; + u32 to_inv_ind = (i + 1) % mis; + const ListRingSpec &to_inv_sp = m_inventory_rings[to_inv_ind]; + InventoryList *list_from = list_s; + if (!s.isValid()) + break; + Inventory *inv_to = m_invmgr->getInventory(to_inv_sp.inventoryloc); + if (!inv_to) + break; + InventoryList *list_to = inv_to->getList(to_inv_sp.listname); + if (!list_to) + break; + ItemStack stack_from = list_from->getItem(s.i); + assert(shift_move_amount <= stack_from.count); + if (m_client->getProtoVersion() >= 25) { + infostream << "Handing IACTION_MOVE to manager" << std::endl; + IMoveAction *a = new IMoveAction(); + a->count = shift_move_amount; + a->from_inv = s.inventoryloc; + a->from_list = s.listname; + a->from_i = s.i; + a->to_inv = to_inv_sp.inventoryloc; + a->to_list = to_inv_sp.listname; + a->move_somewhere = true; + m_invmgr->inventoryAction(a); + } else { + // find a place (or more than one) to add the new item + u32 ilt_size = list_to->getSize(); + ItemStack leftover; + for (u32 slot_to = 0; slot_to < ilt_size + && shift_move_amount > 0; slot_to++) { + list_to->itemFits(slot_to, stack_from, &leftover); + if (leftover.count < stack_from.count) { + infostream << "Handing IACTION_MOVE to manager" << std::endl; + IMoveAction *a = new IMoveAction(); + a->count = MYMIN(shift_move_amount, + (u32) (stack_from.count - leftover.count)); + shift_move_amount -= a->count; + a->from_inv = s.inventoryloc; + a->from_list = s.listname; + a->from_i = s.i; + a->to_inv = to_inv_sp.inventoryloc; + a->to_list = to_inv_sp.listname; + a->to_i = slot_to; + m_invmgr->inventoryAction(a); + stack_from = leftover; + } + } + } + } while (0); + } else if (drop_amount > 0) { m_selected_content_guess = ItemStack(); // Clear // Send IACTION_DROP @@ -3311,15 +3438,14 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) assert(drop_amount > 0 && drop_amount <= m_selected_amount); m_selected_amount -= drop_amount; - infostream<<"Handing IACTION_DROP to manager"<count = drop_amount; a->from_inv = m_selected_item->inventoryloc; a->from_list = m_selected_item->listname; a->from_i = m_selected_item->i; m_invmgr->inventoryAction(a); - } - else if(craft_amount > 0) { + } else if (craft_amount > 0) { m_selected_content_guess = ItemStack(); // Clear // Send IACTION_CRAFT @@ -3327,7 +3453,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) assert(s.isValid()); assert(inv_s); - infostream<<"Handing IACTION_CRAFT to manager"<count = craft_amount; a->craft_inv = s.inventoryloc; @@ -3335,7 +3461,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } // If m_selected_amount has been decreased to zero, deselect - if(m_selected_amount == 0) { + if (m_selected_amount == 0) { delete m_selected_item; m_selected_item = NULL; m_selected_amount = 0; @@ -3344,12 +3470,12 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } m_old_pointer = m_pointer; } - if(event.EventType==EET_GUI_EVENT) { + if (event.EventType == EET_GUI_EVENT) { - if(event.GUIEvent.EventType==gui::EGET_TAB_CHANGED + if (event.GUIEvent.EventType == gui::EGET_TAB_CHANGED && isVisible()) { // find the element that was clicked - for(unsigned int i=0; igetID())) { @@ -3360,16 +3486,16 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } } } - if(event.GUIEvent.EventType==gui::EGET_ELEMENT_FOCUS_LOST + if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST && isVisible()) { - if(!canTakeFocus(event.GUIEvent.Element)) { + if (!canTakeFocus(event.GUIEvent.Element)) { infostream<<"GUIFormSpecMenu: Not allowing focus change." <gotText(narrow_to_wide("ExitButton")); + m_text_dst->gotText(L"ExitButton"); } // quitMenu deallocates menu return true; } // find the element that was clicked - for(u32 i=0; igetID())) { s.send = true; - if(s.is_exit) { + if (s.is_exit) { if (m_allowclose) { acceptInput(quit_mode_accept); quitMenu(); } else { - m_text_dst->gotText(narrow_to_wide("ExitButton")); + m_text_dst->gotText(L"ExitButton"); } return true; } else { @@ -3408,11 +3534,10 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) s.send = false; return true; } - } - else if ((s.ftype == f_DropDown) && + } else if ((s.ftype == f_DropDown) && (s.fid == event.GUIEvent.Caller->getID())) { // only send the changed dropdown - for(u32 i=0; igetID())) - { + } else if ((s.ftype == f_ScrollBar) && + (s.fid == event.GUIEvent.Caller->getID())) { s.fdefault = L"Changed"; acceptInput(quit_mode_no); s.fdefault = L""; @@ -3441,8 +3564,8 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } } - if(event.GUIEvent.EventType == gui::EGET_EDITBOX_ENTER) { - if(event.GUIEvent.Caller->getID() > 257) { + if (event.GUIEvent.EventType == gui::EGET_EDITBOX_ENTER) { + if (event.GUIEvent.Caller->getID() > 257) { if (m_allowclose) { acceptInput(quit_mode_accept); @@ -3456,11 +3579,11 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event) } } - if(event.GUIEvent.EventType == gui::EGET_TABLE_CHANGED) { + if (event.GUIEvent.EventType == gui::EGET_TABLE_CHANGED) { int current_id = event.GUIEvent.Caller->getID(); - if(current_id > 257) { + if (current_id > 257) { // find the element that was clicked - for(u32 i=0; i::iterator iter = m_fields.begin(); - iter != m_fields.end(); iter++) { + iter != m_fields.end(); ++iter) { if (iter->fid == id) { return iter->fname; } } - return L""; + return ""; } /** @@ -3502,7 +3625,7 @@ std::wstring GUIFormSpecMenu::getNameByID(s32 id) std::wstring GUIFormSpecMenu::getLabelByID(s32 id) { for(std::vector::iterator iter = m_fields.begin(); - iter != m_fields.end(); iter++) { + iter != m_fields.end(); ++iter) { if (iter->fid == id) { return iter->flabel; } diff --git a/src/guiFormSpecMenu.h b/src/guiFormSpecMenu.h index 01b9ed81..254af22e 100644 --- a/src/guiFormSpecMenu.h +++ b/src/guiFormSpecMenu.h @@ -121,6 +121,22 @@ class GUIFormSpecMenu : public GUIModalMenu s32 start_item_i; }; + struct ListRingSpec + { + ListRingSpec() + { + } + ListRingSpec(const InventoryLocation &a_inventoryloc, + const std::string &a_listname): + inventoryloc(a_inventoryloc), + listname(a_listname) + { + } + + InventoryLocation inventoryloc; + std::string listname; + }; + struct ImageDrawSpec { ImageDrawSpec() @@ -152,7 +168,7 @@ class GUIFormSpecMenu : public GUIModalMenu FieldSpec() { } - FieldSpec(const std::wstring &name, const std::wstring &label, + FieldSpec(const std::string &name, const std::wstring &label, const std::wstring &fdeflt, int id) : fname(name), flabel(label), @@ -163,7 +179,7 @@ class GUIFormSpecMenu : public GUIModalMenu ftype = f_Unknown; is_exit = false; } - std::wstring fname; + std::string fname; std::wstring flabel; std::wstring fdefault; int fid; @@ -255,7 +271,7 @@ public: void removeChildren(); void setInitialFocus(); - void setFocus(std::wstring elementname) + void setFocus(std::string &elementname) { m_focused_element = elementname; } @@ -278,7 +294,7 @@ public: bool doPause; bool pausesGame() { return doPause; } - GUITable* getTable(std::wstring tablename); + GUITable* getTable(const std::string &tablename); #ifdef __ANDROID__ bool getAndroidUIInput(); @@ -306,6 +322,7 @@ protected: std::vector m_inventorylists; + std::vector m_inventory_rings; std::vector m_backgrounds; std::vector m_images; std::vector m_itemimages; @@ -313,7 +330,7 @@ protected: std::vector m_fields; std::vector > m_tables; std::vector > m_checkboxes; - std::map m_tooltips; + std::map m_tooltips; std::vector > m_scrollbars; ItemSpec *m_selected_item; @@ -355,7 +372,7 @@ private: IFormSource *m_form_src; TextDest *m_text_dst; unsigned int m_formspec_version; - std::wstring m_focused_element; + std::string m_focused_element; typedef struct { bool explicit_size; @@ -364,11 +381,11 @@ private: core::rect rect; v2s32 basepos; v2u32 screensize; - std::wstring focused_fieldname; + std::string focused_fieldname; GUITable::TableOptions table_options; GUITable::TableColumns table_columns; // used to restore table selection/scroll/treeview state - std::map table_dyndata; + std::map table_dyndata; } parserData; typedef struct { @@ -384,6 +401,7 @@ private: void parseSize(parserData* data,std::string element); void parseList(parserData* data,std::string element); + void parseListRing(parserData* data,std::string element); void parseCheckbox(parserData* data,std::string element); void parseImage(parserData* data,std::string element); void parseItemImage(parserData* data,std::string element); @@ -430,10 +448,10 @@ private: gui::IGUIFont *m_font; std::wstring getLabelByID(s32 id); - std::wstring getNameByID(s32 id); + std::string getNameByID(s32 id); #ifdef __ANDROID__ v2s32 m_down_pos; - std::wstring m_JavaDialogFieldName; + std::string m_JavaDialogFieldName; #endif /* If true, remap a double-click (or double-tap) action to ESC. This is so diff --git a/src/guiKeyChangeMenu.cpp b/src/guiKeyChangeMenu.cpp index f6de5c3b..e9b36b33 100644 --- a/src/guiKeyChangeMenu.cpp +++ b/src/guiKeyChangeMenu.cpp @@ -81,7 +81,7 @@ GUIKeyChangeMenu::~GUIKeyChangeMenu() removeChildren(); for (std::vector::iterator iter = key_settings.begin(); - iter != key_settings.end(); iter ++) { + iter != key_settings.end(); ++iter) { delete[] (*iter)->button_name; delete (*iter); } @@ -269,8 +269,7 @@ bool GUIKeyChangeMenu::resetMenu() bool GUIKeyChangeMenu::OnEvent(const SEvent& event) { if (event.EventType == EET_KEY_INPUT_EVENT && activeKey >= 0 - && event.KeyInput.PressedDown) - { + && event.KeyInput.PressedDown) { bool prefer_character = shift_down; KeyPress kp(event.KeyInput, prefer_character); @@ -328,9 +327,12 @@ bool GUIKeyChangeMenu::OnEvent(const SEvent& event) return true; } } - } - if (event.EventType == EET_GUI_EVENT) - { + } else if (event.EventType == EET_KEY_INPUT_EVENT && activeKey < 0 + && event.KeyInput.PressedDown + && event.KeyInput.Key == irr::KEY_ESCAPE) { + quitMenu(); + return true; + } else if (event.EventType == EET_GUI_EVENT) { if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST && isVisible()) { diff --git a/src/guiMainMenu.h b/src/guiMainMenu.h index bb888d5e..5d158abd 100644 --- a/src/guiMainMenu.h +++ b/src/guiMainMenu.h @@ -25,17 +25,19 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include -enum -{ - TAB_SINGLEPLAYER=0, - TAB_MULTIPLAYER, - TAB_ADVANCED, - TAB_SETTINGS, - TAB_CREDITS +struct MainMenuDataForScript { + + MainMenuDataForScript() : + reconnect_requested(false) + {} + + // Whether the server has requested a reconnect + bool reconnect_requested; + + std::string errormessage; }; -struct MainMenuData -{ +struct MainMenuData { // Client options std::string servername; std::string serverdescription; @@ -43,19 +45,22 @@ struct MainMenuData std::string port; std::string name; std::string password; + // Whether to reconnect + bool do_reconnect; // Server options bool enable_public; int selected_world; bool simple_singleplayer_mode; - //error handling - std::string errormessage; + // Data to be passed to the script + MainMenuDataForScript script_data; + MainMenuData(): + do_reconnect(false), enable_public(false), selected_world(0), - simple_singleplayer_mode(false), - errormessage("") + simple_singleplayer_mode(false) {} }; diff --git a/src/guiPasswordChange.cpp b/src/guiPasswordChange.cpp index 1c1a1f06..e2f9994b 100644 --- a/src/guiPasswordChange.cpp +++ b/src/guiPasswordChange.cpp @@ -203,8 +203,8 @@ bool GUIPasswordChange::acceptInput() e->setVisible(true); return false; } - m_client->sendChangePassword(wide_to_narrow(oldpass), - wide_to_narrow(newpass)); + m_client->sendChangePassword(wide_to_utf8(oldpass), + wide_to_utf8(newpass)); return true; } diff --git a/src/guiTable.cpp b/src/guiTable.cpp index d08a563a..7d66eaec 100644 --- a/src/guiTable.cpp +++ b/src/guiTable.cpp @@ -556,24 +556,46 @@ s32 GUITable::getSelected() const void GUITable::setSelected(s32 index) { + s32 old_selected = m_selected; + m_selected = -1; m_sel_column = 0; m_sel_doubleclick = false; - --index; + --index; // Switch from 1-based indexing to 0-based indexing s32 rowcount = m_rows.size(); - - if (index >= rowcount) + if (rowcount == 0) { + return; + } else if (index < 0) { + index = 0; + } else if (index >= rowcount) { index = rowcount - 1; - while (index >= 0 && m_rows[index].visible_index < 0) - --index; + } + + // If the selected row is not visible, open its ancestors to make it visible + bool selection_invisible = m_rows[index].visible_index < 0; + if (selection_invisible) { + std::set opened_trees; + getOpenedTrees(opened_trees); + s32 indent = m_rows[index].indent; + for (s32 j = index - 1; j >= 0; --j) { + if (m_rows[j].indent < indent) { + opened_trees.insert(j); + indent = m_rows[j].indent; + } + } + setOpenedTrees(opened_trees); + } + if (index >= 0) { m_selected = m_rows[index].visible_index; assert(m_selected >= 0 && m_selected < (s32) m_visible_rows.size()); } - autoScroll(); + if (m_selected != old_selected || selection_invisible) { + autoScroll(); + } } GUITable::DynamicData GUITable::getDynamicData() const @@ -596,11 +618,11 @@ void GUITable::setDynamicData(const DynamicData &dyndata) m_keynav_time = dyndata.keynav_time; m_keynav_buffer = dyndata.keynav_buffer; - m_scrollbar->setPos(dyndata.scrollpos); - setSelected(dyndata.selected); m_sel_column = 0; m_sel_doubleclick = false; + + m_scrollbar->setPos(dyndata.scrollpos); } const c8* GUITable::getTypeName() const @@ -906,6 +928,11 @@ bool GUITable::OnEvent(const SEvent &event) sel_doubleclick) { sendTableEvent(sel_column, sel_doubleclick); } + + // Treeview: double click opens/closes trees + if (m_has_tree_column && sel_doubleclick) { + toggleVisibleTree(m_selected, 0, false); + } } } return true; @@ -929,7 +956,7 @@ s32 GUITable::allocString(const std::string &text) std::map::iterator it = m_alloc_strings.find(text); if (it == m_alloc_strings.end()) { s32 id = m_strings.size(); - std::wstring wtext = narrow_to_wide(text); + std::wstring wtext = utf8_to_wide(text); m_strings.push_back(core::stringw(wtext.c_str())); m_alloc_strings.insert(std::make_pair(text, id)); return id; @@ -1091,7 +1118,9 @@ void GUITable::getOpenedTrees(std::set &opened_trees) const void GUITable::setOpenedTrees(const std::set &opened_trees) { - s32 old_selected = getSelected(); + s32 old_selected = -1; + if (m_selected >= 0) + old_selected = m_visible_rows[m_selected]; std::vector parents; std::vector closed_parents; @@ -1143,7 +1172,9 @@ void GUITable::setOpenedTrees(const std::set &opened_trees) updateScrollBar(); - setSelected(old_selected); + // m_selected must be updated since it is a visible row index + if (old_selected >= 0) + m_selected = m_rows[old_selected].visible_index; } void GUITable::openTree(s32 to_open) diff --git a/src/guiscalingfilter.cpp b/src/guiscalingfilter.cpp index 99d483e6..9766a30a 100644 --- a/src/guiscalingfilter.cpp +++ b/src/guiscalingfilter.cpp @@ -51,13 +51,13 @@ void guiScalingCache(io::path key, video::IVideoDriver *driver, video::IImage *v void guiScalingCacheClear(video::IVideoDriver *driver) { for (std::map::iterator it = g_imgCache.begin(); - it != g_imgCache.end(); it++) { + it != g_imgCache.end(); ++it) { if (it->second != NULL) it->second->drop(); } g_imgCache.clear(); for (std::map::iterator it = g_txrCache.begin(); - it != g_txrCache.end(); it++) { + it != g_txrCache.end(); ++it) { if (it->second != NULL) driver->removeTexture(it->second); } diff --git a/src/httpfetch.cpp b/src/httpfetch.cpp index f77d4ff5..9a551662 100644 --- a/src/httpfetch.cpp +++ b/src/httpfetch.cpp @@ -25,7 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include #include -#include "jthread/jevent.h" +#include "threading/event.h" #include "config.h" #include "exceptions.h" #include "debug.h" @@ -35,7 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "version.h" #include "settings.h" -JMutex g_httpfetch_mutex; +Mutex g_httpfetch_mutex; std::map > g_httpfetch_results; HTTPFetchRequest::HTTPFetchRequest() @@ -55,7 +55,7 @@ static void httpfetch_deliver_result(const HTTPFetchResult &fetch_result) { unsigned long caller = fetch_result.caller; if (caller != HTTPFETCH_DISCARD) { - JMutexAutoLock lock(g_httpfetch_mutex); + MutexAutoLock lock(g_httpfetch_mutex); g_httpfetch_results[caller].push(fetch_result); } } @@ -64,7 +64,7 @@ static void httpfetch_request_clear(unsigned long caller); unsigned long httpfetch_caller_alloc() { - JMutexAutoLock lock(g_httpfetch_mutex); + MutexAutoLock lock(g_httpfetch_mutex); // Check each caller ID except HTTPFETCH_DISCARD const unsigned long discard = HTTPFETCH_DISCARD; @@ -91,14 +91,14 @@ void httpfetch_caller_free(unsigned long caller) httpfetch_request_clear(caller); if (caller != HTTPFETCH_DISCARD) { - JMutexAutoLock lock(g_httpfetch_mutex); + MutexAutoLock lock(g_httpfetch_mutex); g_httpfetch_results.erase(caller); } } bool httpfetch_async_get(unsigned long caller, HTTPFetchResult &fetch_result) { - JMutexAutoLock lock(g_httpfetch_mutex); + MutexAutoLock lock(g_httpfetch_mutex); // Check that caller exists std::map >::iterator @@ -390,7 +390,7 @@ HTTPFetchOngoing::~HTTPFetchOngoing() } -class CurlFetchThread : public JThread +class CurlFetchThread : public Thread { protected: enum RequestType { @@ -414,7 +414,8 @@ protected: std::list m_queued_fetches; public: - CurlFetchThread(int parallel_limit) + CurlFetchThread(int parallel_limit) : + Thread("CurlFetch") { if (parallel_limit >= 1) m_parallel_limit = parallel_limit; @@ -613,13 +614,9 @@ protected: } } - void * Thread() + void *run() { - ThreadStarted(); - log_register_thread("CurlFetchThread"); - DSTACK(__FUNCTION_NAME); - - porting::setThreadName("CurlFetchThread"); + DSTACK(FUNCTION_NAME); CurlHandlePool pool; @@ -631,7 +628,7 @@ protected: FATAL_ERROR_IF(!m_all_ongoing.empty(), "Expected empty"); - while (!StopRequested()) { + while (!stopRequested()) { BEGIN_DEBUG_EXCEPTION_HANDLER /* @@ -680,7 +677,7 @@ protected: else waitForIO(100); - END_DEBUG_EXCEPTION_HANDLER(errorstream) + END_DEBUG_EXCEPTION_HANDLER } // Call curl_multi_remove_handle and cleanup easy handles @@ -719,9 +716,9 @@ void httpfetch_cleanup() { verbosestream<<"httpfetch_cleanup: cleaning up"<Stop(); + g_httpfetch_thread->stop(); g_httpfetch_thread->requestWakeUp(); - g_httpfetch_thread->Wait(); + g_httpfetch_thread->wait(); delete g_httpfetch_thread; curl_global_cleanup(); @@ -730,18 +727,17 @@ void httpfetch_cleanup() void httpfetch_async(const HTTPFetchRequest &fetch_request) { g_httpfetch_thread->requestFetch(fetch_request); - if (!g_httpfetch_thread->IsRunning()) - g_httpfetch_thread->Start(); + if (!g_httpfetch_thread->isRunning()) + g_httpfetch_thread->start(); } static void httpfetch_request_clear(unsigned long caller) { - if (g_httpfetch_thread->IsRunning()) { + if (g_httpfetch_thread->isRunning()) { Event event; g_httpfetch_thread->requestClear(caller, &event); event.wait(); - } - else { + } else { g_httpfetch_thread->requestClear(caller, NULL); } } diff --git a/src/hud.cpp b/src/hud.cpp index a82849ad..af661b81 100644 --- a/src/hud.cpp +++ b/src/hud.cpp @@ -275,7 +275,7 @@ void Hud::drawLuaElements(v3s16 camera_offset) { (e->number >> 8) & 0xFF, (e->number >> 0) & 0xFF); core::rect size(0, 0, e->scale.X, text_height * e->scale.Y); - std::wstring text = narrow_to_wide(e->text); + std::wstring text = utf8_to_wide(e->text); core::dimension2d textsize = font->getDimension(text.c_str()); v2s32 offset((e->align.X - 1.0) * (textsize.Width / 2), (e->align.Y - 1.0) * (textsize.Height / 2)); @@ -310,11 +310,11 @@ void Hud::drawLuaElements(v3s16 camera_offset) { (e->number >> 8) & 0xFF, (e->number >> 0) & 0xFF); core::rect size(0, 0, 200, 2 * text_height); - std::wstring text = narrow_to_wide(e->name); + std::wstring text = utf8_to_wide(e->name); font->draw(text.c_str(), size + pos, color); std::ostringstream os; - os<text; - text = narrow_to_wide(os.str()); + os << distance << e->text; + text = utf8_to_wide(os.str()); pos.Y += text_height; font->draw(text.c_str(), size + pos, color); break; } @@ -468,7 +468,7 @@ void Hud::drawCrosshair() { void Hud::drawSelectionBoxes(std::vector &hilightboxes) { for (std::vector::const_iterator i = hilightboxes.begin(); - i != hilightboxes.end(); i++) { + i != hilightboxes.end(); ++i) { driver->draw3DBox(*i, selectionbox_argb); } } @@ -552,7 +552,7 @@ void drawItemStack(video::IVideoDriver *driver, { // Get the item count as a string std::string text = itos(item.count); - v2u32 dim = font->getDimension(narrow_to_wide(text).c_str()); + v2u32 dim = font->getDimension(utf8_to_wide(text).c_str()); v2s32 sdim(dim.X,dim.Y); core::rect rect2( diff --git a/src/hud.h b/src/hud.h index 47aeca0d..787685fc 100644 --- a/src/hud.h +++ b/src/hud.h @@ -32,11 +32,15 @@ with this program; if not, write to the Free Software Foundation, Inc., #define HUD_CORNER_LOWER 1 #define HUD_CORNER_CENTER 2 +// Note that these visibility flags do not determine if the hud items are +// actually drawn, but rather, whether to draw the item should the rest +// of the game state permit it. #define HUD_FLAG_HOTBAR_VISIBLE (1 << 0) #define HUD_FLAG_HEALTHBAR_VISIBLE (1 << 1) #define HUD_FLAG_CROSSHAIR_VISIBLE (1 << 2) #define HUD_FLAG_WIELDITEM_VISIBLE (1 << 3) #define HUD_FLAG_BREATHBAR_VISIBLE (1 << 4) +#define HUD_FLAG_MINIMAP_VISIBLE (1 << 5) #define HUD_PARAM_HOTBAR_ITEMCOUNT 1 #define HUD_PARAM_HOTBAR_IMAGE 2 @@ -116,11 +120,11 @@ public: std::string hotbar_selected_image; bool use_hotbar_selected_image; v3s16 camera_offset; - + Hud(video::IVideoDriver *driver,scene::ISceneManager* smgr, gui::IGUIEnvironment* guienv, IGameDef *gamedef, LocalPlayer *player, Inventory *inventory); - + void drawHotbar(u16 playeritem); void resizeHotbar(); void drawCrosshair(); @@ -129,12 +133,12 @@ public: private: void drawStatbar(v2s32 pos, u16 corner, u16 drawdir, std::string texture, s32 count, v2s32 offset, v2s32 size=v2s32()); - + void drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset, InventoryList *mainlist, u16 selectitem, u16 direction); void drawItem(const ItemStack &item, const core::rect& rect, bool selected); - + v2u32 m_screensize; v2s32 m_displaycenter; s32 m_hotbar_imagesize; diff --git a/src/intlGUIEditBox.cpp b/src/intlGUIEditBox.cpp new file mode 100644 index 00000000..33bf8a13 --- /dev/null +++ b/src/intlGUIEditBox.cpp @@ -0,0 +1,1509 @@ +// 11.11.2011 11:11 ValkaTR +// +// This is a copy of intlGUIEditBox from the irrlicht, but with a +// fix in the OnEvent function, which doesn't allowed input of +// other keyboard layouts than latin-1 +// +// Characters like: ä ö ü õ ы й ю я ъ № € ° ... +// +// This fix is only needed for linux, because of a bug +// in the CIrrDeviceLinux.cpp:1014-1015 of the irrlicht +// +// Also locale in the programm should not be changed to +// a "C", "POSIX" or whatever, it should be set to "", +// or XLookupString will return nothing for the international +// characters. +// +// From the "man setlocale": +// +// On startup of the main program, the portable "C" locale +// is selected as default. A program may be made +// portable to all locales by calling: +// +// setlocale(LC_ALL, ""); +// +// after program initialization.... +// + +// Copyright (C) 2002-2013 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#include "intlGUIEditBox.h" + +#if defined(_IRR_COMPILE_WITH_GUI_) && IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR < 9 + +#include "IGUISkin.h" +#include "IGUIEnvironment.h" +#include "IGUIFont.h" +#include "IVideoDriver.h" +//#include "rect.h" +//#include "irrlicht/os.cpp" +#include "porting.h" +//#include "Keycodes.h" +#include "log.h" + +/* + todo: + optional scrollbars + ctrl+left/right to select word + double click/ctrl click: word select + drag to select whole words, triple click to select line + optional? dragging selected text + numerical +*/ + +namespace irr +{ +namespace gui +{ + +//! constructor +intlGUIEditBox::intlGUIEditBox(const wchar_t* text, bool border, + IGUIEnvironment* environment, IGUIElement* parent, s32 id, + const core::rect& rectangle) + : IGUIEditBox(environment, parent, id, rectangle), MouseMarking(false), + Border(border), OverrideColorEnabled(false), MarkBegin(0), MarkEnd(0), + OverrideColor(video::SColor(101,255,255,255)), OverrideFont(0), LastBreakFont(0), + Operator(0), BlinkStartTime(0), CursorPos(0), HScrollPos(0), VScrollPos(0), Max(0), + WordWrap(false), MultiLine(false), AutoScroll(true), PasswordBox(false), + PasswordChar(L'*'), HAlign(EGUIA_UPPERLEFT), VAlign(EGUIA_CENTER), + CurrentTextRect(0,0,1,1), FrameRect(rectangle) +{ + #ifdef _DEBUG + setDebugName("intlintlGUIEditBox"); + #endif + + Text = text; + + if (Environment) + Operator = Environment->getOSOperator(); + + if (Operator) + Operator->grab(); + + // this element can be tabbed to + setTabStop(true); + setTabOrder(-1); + + IGUISkin *skin = 0; + if (Environment) + skin = Environment->getSkin(); + if (Border && skin) + { + FrameRect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1; + FrameRect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; + FrameRect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1; + FrameRect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; + } + + breakText(); + + calculateScrollPos(); +} + + +//! destructor +intlGUIEditBox::~intlGUIEditBox() +{ + if (OverrideFont) + OverrideFont->drop(); + + if (Operator) + Operator->drop(); +} + + +//! Sets another skin independent font. +void intlGUIEditBox::setOverrideFont(IGUIFont* font) +{ + if (OverrideFont == font) + return; + + if (OverrideFont) + OverrideFont->drop(); + + OverrideFont = font; + + if (OverrideFont) + OverrideFont->grab(); + + breakText(); +} + +IGUIFont * intlGUIEditBox::getOverrideFont() const +{ + return OverrideFont; +} + +//! Get the font which is used right now for drawing +IGUIFont* intlGUIEditBox::getActiveFont() const +{ + if ( OverrideFont ) + return OverrideFont; + IGUISkin* skin = Environment->getSkin(); + if (skin) + return skin->getFont(); + return 0; +} + +//! Sets another color for the text. +void intlGUIEditBox::setOverrideColor(video::SColor color) +{ + OverrideColor = color; + OverrideColorEnabled = true; +} + +video::SColor intlGUIEditBox::getOverrideColor() const +{ + return OverrideColor; +} + +//! Turns the border on or off +void intlGUIEditBox::setDrawBorder(bool border) +{ + Border = border; +} + +//! Sets whether to draw the background +void intlGUIEditBox::setDrawBackground(bool draw) +{ +} + +//! Sets if the text should use the overide color or the color in the gui skin. +void intlGUIEditBox::enableOverrideColor(bool enable) +{ + OverrideColorEnabled = enable; +} + +bool intlGUIEditBox::isOverrideColorEnabled() const +{ + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return OverrideColorEnabled; +} + +//! Enables or disables word wrap +void intlGUIEditBox::setWordWrap(bool enable) +{ + WordWrap = enable; + breakText(); +} + + +void intlGUIEditBox::updateAbsolutePosition() +{ + core::rect oldAbsoluteRect(AbsoluteRect); + IGUIElement::updateAbsolutePosition(); + if ( oldAbsoluteRect != AbsoluteRect ) + { + breakText(); + } +} + + +//! Checks if word wrap is enabled +bool intlGUIEditBox::isWordWrapEnabled() const +{ + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return WordWrap; +} + + +//! Enables or disables newlines. +void intlGUIEditBox::setMultiLine(bool enable) +{ + MultiLine = enable; +} + + +//! Checks if multi line editing is enabled +bool intlGUIEditBox::isMultiLineEnabled() const +{ + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return MultiLine; +} + + +void intlGUIEditBox::setPasswordBox(bool passwordBox, wchar_t passwordChar) +{ + PasswordBox = passwordBox; + if (PasswordBox) + { + PasswordChar = passwordChar; + setMultiLine(false); + setWordWrap(false); + BrokenText.clear(); + } +} + + +bool intlGUIEditBox::isPasswordBox() const +{ + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return PasswordBox; +} + + +//! Sets text justification +void intlGUIEditBox::setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical) +{ + HAlign = horizontal; + VAlign = vertical; +} + + +//! called if an event happened. +bool intlGUIEditBox::OnEvent(const SEvent& event) +{ + if (IsEnabled) + { + + switch(event.EventType) + { + case EET_GUI_EVENT: + if (event.GUIEvent.EventType == EGET_ELEMENT_FOCUS_LOST) + { + if (event.GUIEvent.Caller == this) + { + MouseMarking = false; + setTextMarkers(0,0); + } + } + break; + case EET_KEY_INPUT_EVENT: + { +#if (defined(linux) || defined(__linux) || defined(__FreeBSD__)) + // ################################################################ + // ValkaTR: + // This part is the difference from the original intlGUIEditBox + // It converts UTF-8 character into a UCS-2 (wchar_t) + wchar_t wc = L'_'; + mbtowc( &wc, (char *) &event.KeyInput.Char, sizeof(event.KeyInput.Char) ); + + //printf( "char: %lc (%u) \r\n", wc, wc ); + + SEvent irrevent(event); + irrevent.KeyInput.Char = wc; + // ################################################################ + + if (processKey(irrevent)) + return true; +#else + if (processKey(event)) + return true; +#endif // defined(linux) + + break; + } + case EET_MOUSE_INPUT_EVENT: + if (processMouse(event)) + return true; + break; + default: + break; + } + } + + return IGUIElement::OnEvent(event); +} + + +bool intlGUIEditBox::processKey(const SEvent& event) +{ + if (!event.KeyInput.PressedDown) + return false; + + bool textChanged = false; + s32 newMarkBegin = MarkBegin; + s32 newMarkEnd = MarkEnd; + + // control shortcut handling + + if (event.KeyInput.Control) + { + // german backlash '\' entered with control + '?' + if ( event.KeyInput.Char == '\\' ) + { + inputChar(event.KeyInput.Char); + return true; + } + + switch(event.KeyInput.Key) + { + case KEY_KEY_A: + // select all + newMarkBegin = 0; + newMarkEnd = Text.size(); + break; + case KEY_KEY_C: + // copy to clipboard + if (!PasswordBox && Operator && MarkBegin != MarkEnd) + { + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + + core::stringc s; + s = Text.subString(realmbgn, realmend - realmbgn).c_str(); + Operator->copyToClipboard(s.c_str()); + } + break; + case KEY_KEY_X: + // cut to the clipboard + if (!PasswordBox && Operator && MarkBegin != MarkEnd) + { + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + + // copy + core::stringc sc; + sc = Text.subString(realmbgn, realmend - realmbgn).c_str(); + Operator->copyToClipboard(sc.c_str()); + + if (IsEnabled) + { + // delete + core::stringw s; + s = Text.subString(0, realmbgn); + s.append( Text.subString(realmend, Text.size()-realmend) ); + Text = s; + + CursorPos = realmbgn; + newMarkBegin = 0; + newMarkEnd = 0; + textChanged = true; + } + } + break; + case KEY_KEY_V: + if ( !IsEnabled ) + break; + + // paste from the clipboard + if (Operator) + { + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + + // add new character + const c8* p = Operator->getTextFromClipboard(); + if (p) + { + if (MarkBegin == MarkEnd) + { + // insert text + core::stringw s = Text.subString(0, CursorPos); + s.append(p); + s.append( Text.subString(CursorPos, Text.size()-CursorPos) ); + + if (!Max || s.size()<=Max) // thx to Fish FH for fix + { + Text = s; + s = p; + CursorPos += s.size(); + } + } + else + { + // replace text + + core::stringw s = Text.subString(0, realmbgn); + s.append(p); + s.append( Text.subString(realmend, Text.size()-realmend) ); + + if (!Max || s.size()<=Max) // thx to Fish FH for fix + { + Text = s; + s = p; + CursorPos = realmbgn + s.size(); + } + } + } + + newMarkBegin = 0; + newMarkEnd = 0; + textChanged = true; + } + break; + case KEY_HOME: + // move/highlight to start of text + if (event.KeyInput.Shift) + { + newMarkEnd = CursorPos; + newMarkBegin = 0; + CursorPos = 0; + } + else + { + CursorPos = 0; + newMarkBegin = 0; + newMarkEnd = 0; + } + break; + case KEY_END: + // move/highlight to end of text + if (event.KeyInput.Shift) + { + newMarkBegin = CursorPos; + newMarkEnd = Text.size(); + CursorPos = 0; + } + else + { + CursorPos = Text.size(); + newMarkBegin = 0; + newMarkEnd = 0; + } + break; + default: + return false; + } + } + // default keyboard handling + else + switch(event.KeyInput.Key) + { + case KEY_END: + { + s32 p = Text.size(); + if (WordWrap || MultiLine) + { + p = getLineFromPos(CursorPos); + p = BrokenTextPositions[p] + (s32)BrokenText[p].size(); + if (p > 0 && (Text[p-1] == L'\r' || Text[p-1] == L'\n' )) + p-=1; + } + + if (event.KeyInput.Shift) + { + if (MarkBegin == MarkEnd) + newMarkBegin = CursorPos; + + newMarkEnd = p; + } + else + { + newMarkBegin = 0; + newMarkEnd = 0; + } + CursorPos = p; + BlinkStartTime = porting::getTimeMs(); + } + break; + case KEY_HOME: + { + + s32 p = 0; + if (WordWrap || MultiLine) + { + p = getLineFromPos(CursorPos); + p = BrokenTextPositions[p]; + } + + if (event.KeyInput.Shift) + { + if (MarkBegin == MarkEnd) + newMarkBegin = CursorPos; + newMarkEnd = p; + } + else + { + newMarkBegin = 0; + newMarkEnd = 0; + } + CursorPos = p; + BlinkStartTime = porting::getTimeMs(); + } + break; + case KEY_RETURN: + if (MultiLine) + { + inputChar(L'\n'); + return true; + } + else + { + sendGuiEvent( EGET_EDITBOX_ENTER ); + } + break; + case KEY_LEFT: + + if (event.KeyInput.Shift) + { + if (CursorPos > 0) + { + if (MarkBegin == MarkEnd) + newMarkBegin = CursorPos; + + newMarkEnd = CursorPos-1; + } + } + else + { + newMarkBegin = 0; + newMarkEnd = 0; + } + + if (CursorPos > 0) CursorPos--; + BlinkStartTime = porting::getTimeMs(); + break; + + case KEY_RIGHT: + if (event.KeyInput.Shift) + { + if (Text.size() > (u32)CursorPos) + { + if (MarkBegin == MarkEnd) + newMarkBegin = CursorPos; + + newMarkEnd = CursorPos+1; + } + } + else + { + newMarkBegin = 0; + newMarkEnd = 0; + } + + if (Text.size() > (u32)CursorPos) CursorPos++; + BlinkStartTime = porting::getTimeMs(); + break; + case KEY_UP: + if (MultiLine || (WordWrap && BrokenText.size() > 1) ) + { + s32 lineNo = getLineFromPos(CursorPos); + s32 mb = (MarkBegin == MarkEnd) ? CursorPos : (MarkBegin > MarkEnd ? MarkBegin : MarkEnd); + if (lineNo > 0) + { + s32 cp = CursorPos - BrokenTextPositions[lineNo]; + if ((s32)BrokenText[lineNo-1].size() < cp) + CursorPos = BrokenTextPositions[lineNo-1] + (s32)BrokenText[lineNo-1].size()-1; + else + CursorPos = BrokenTextPositions[lineNo-1] + cp; + } + + if (event.KeyInput.Shift) + { + newMarkBegin = mb; + newMarkEnd = CursorPos; + } + else + { + newMarkBegin = 0; + newMarkEnd = 0; + } + + } + else + { + return false; + } + break; + case KEY_DOWN: + if (MultiLine || (WordWrap && BrokenText.size() > 1) ) + { + s32 lineNo = getLineFromPos(CursorPos); + s32 mb = (MarkBegin == MarkEnd) ? CursorPos : (MarkBegin < MarkEnd ? MarkBegin : MarkEnd); + if (lineNo < (s32)BrokenText.size()-1) + { + s32 cp = CursorPos - BrokenTextPositions[lineNo]; + if ((s32)BrokenText[lineNo+1].size() < cp) + CursorPos = BrokenTextPositions[lineNo+1] + BrokenText[lineNo+1].size()-1; + else + CursorPos = BrokenTextPositions[lineNo+1] + cp; + } + + if (event.KeyInput.Shift) + { + newMarkBegin = mb; + newMarkEnd = CursorPos; + } + else + { + newMarkBegin = 0; + newMarkEnd = 0; + } + + } + else + { + return false; + } + break; + + case KEY_BACK: + if ( !this->IsEnabled ) + break; + + if (Text.size()) + { + core::stringw s; + + if (MarkBegin != MarkEnd) + { + // delete marked text + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + + s = Text.subString(0, realmbgn); + s.append( Text.subString(realmend, Text.size()-realmend) ); + Text = s; + + CursorPos = realmbgn; + } + else + { + // delete text behind cursor + if (CursorPos>0) + s = Text.subString(0, CursorPos-1); + else + s = L""; + s.append( Text.subString(CursorPos, Text.size()-CursorPos) ); + Text = s; + --CursorPos; + } + + if (CursorPos < 0) + CursorPos = 0; + BlinkStartTime = porting::getTimeMs(); + newMarkBegin = 0; + newMarkEnd = 0; + textChanged = true; + } + break; + case KEY_DELETE: + if ( !this->IsEnabled ) + break; + + if (Text.size() != 0) + { + core::stringw s; + + if (MarkBegin != MarkEnd) + { + // delete marked text + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + + s = Text.subString(0, realmbgn); + s.append( Text.subString(realmend, Text.size()-realmend) ); + Text = s; + + CursorPos = realmbgn; + } + else + { + // delete text before cursor + s = Text.subString(0, CursorPos); + s.append( Text.subString(CursorPos+1, Text.size()-CursorPos-1) ); + Text = s; + } + + if (CursorPos > (s32)Text.size()) + CursorPos = (s32)Text.size(); + + BlinkStartTime = porting::getTimeMs(); + newMarkBegin = 0; + newMarkEnd = 0; + textChanged = true; + } + break; + + case KEY_ESCAPE: + case KEY_TAB: + case KEY_SHIFT: + case KEY_F1: + case KEY_F2: + case KEY_F3: + case KEY_F4: + case KEY_F5: + case KEY_F6: + case KEY_F7: + case KEY_F8: + case KEY_F9: + case KEY_F10: + case KEY_F11: + case KEY_F12: + case KEY_F13: + case KEY_F14: + case KEY_F15: + case KEY_F16: + case KEY_F17: + case KEY_F18: + case KEY_F19: + case KEY_F20: + case KEY_F21: + case KEY_F22: + case KEY_F23: + case KEY_F24: + // ignore these keys + return false; + + default: + inputChar(event.KeyInput.Char); + return true; + } + + // Set new text markers + setTextMarkers( newMarkBegin, newMarkEnd ); + + // break the text if it has changed + if (textChanged) + { + breakText(); + sendGuiEvent(EGET_EDITBOX_CHANGED); + } + + calculateScrollPos(); + + return true; +} + + +//! draws the element and its children +void intlGUIEditBox::draw() +{ + if (!IsVisible) + return; + + const bool focus = Environment->hasFocus(this); + + IGUISkin* skin = Environment->getSkin(); + if (!skin) + return; + + FrameRect = AbsoluteRect; + + // draw the border + + if (Border) + { + skin->draw3DSunkenPane(this, skin->getColor(EGDC_WINDOW), + false, true, FrameRect, &AbsoluteClippingRect); + + FrameRect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1; + FrameRect.UpperLeftCorner.Y += skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; + FrameRect.LowerRightCorner.X -= skin->getSize(EGDS_TEXT_DISTANCE_X)+1; + FrameRect.LowerRightCorner.Y -= skin->getSize(EGDS_TEXT_DISTANCE_Y)+1; + } + core::rect localClipRect = FrameRect; + localClipRect.clipAgainst(AbsoluteClippingRect); + + // draw the text + + IGUIFont* font = OverrideFont; + if (!OverrideFont) + font = skin->getFont(); + + s32 cursorLine = 0; + s32 charcursorpos = 0; + + if (font) + { + if (LastBreakFont != font) + { + breakText(); + } + + // calculate cursor pos + + core::stringw *txtLine = &Text; + s32 startPos = 0; + + core::stringw s, s2; + + // get mark position + const bool ml = (!PasswordBox && (WordWrap || MultiLine)); + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + const s32 hlineStart = ml ? getLineFromPos(realmbgn) : 0; + const s32 hlineCount = ml ? getLineFromPos(realmend) - hlineStart + 1 : 1; + const s32 lineCount = ml ? BrokenText.size() : 1; + + // Save the override color information. + // Then, alter it if the edit box is disabled. + const bool prevOver = OverrideColorEnabled; + const video::SColor prevColor = OverrideColor; + + if (Text.size()) + { + if (!IsEnabled && !OverrideColorEnabled) + { + OverrideColorEnabled = true; + OverrideColor = skin->getColor(EGDC_GRAY_TEXT); + } + + for (s32 i=0; i < lineCount; ++i) + { + setTextRect(i); + + // clipping test - don't draw anything outside the visible area + core::rect c = localClipRect; + c.clipAgainst(CurrentTextRect); + if (!c.isValid()) + continue; + + // get current line + if (PasswordBox) + { + if (BrokenText.size() != 1) + { + BrokenText.clear(); + BrokenText.push_back(core::stringw()); + } + if (BrokenText[0].size() != Text.size()) + { + BrokenText[0] = Text; + for (u32 q = 0; q < Text.size(); ++q) + { + BrokenText[0] [q] = PasswordChar; + } + } + txtLine = &BrokenText[0]; + startPos = 0; + } + else + { + txtLine = ml ? &BrokenText[i] : &Text; + startPos = ml ? BrokenTextPositions[i] : 0; + } + + + // draw normal text + font->draw(txtLine->c_str(), CurrentTextRect, + OverrideColorEnabled ? OverrideColor : skin->getColor(EGDC_BUTTON_TEXT), + false, true, &localClipRect); + + // draw mark and marked text + if (focus && MarkBegin != MarkEnd && i >= hlineStart && i < hlineStart + hlineCount) + { + + s32 mbegin = 0, mend = 0; + s32 lineStartPos = 0, lineEndPos = txtLine->size(); + + if (i == hlineStart) + { + // highlight start is on this line + s = txtLine->subString(0, realmbgn - startPos); + mbegin = font->getDimension(s.c_str()).Width; + + // deal with kerning + mbegin += font->getKerningWidth( + &((*txtLine)[realmbgn - startPos]), + realmbgn - startPos > 0 ? &((*txtLine)[realmbgn - startPos - 1]) : 0); + + lineStartPos = realmbgn - startPos; + } + if (i == hlineStart + hlineCount - 1) + { + // highlight end is on this line + s2 = txtLine->subString(0, realmend - startPos); + mend = font->getDimension(s2.c_str()).Width; + lineEndPos = (s32)s2.size(); + } + else + mend = font->getDimension(txtLine->c_str()).Width; + + CurrentTextRect.UpperLeftCorner.X += mbegin; + CurrentTextRect.LowerRightCorner.X = CurrentTextRect.UpperLeftCorner.X + mend - mbegin; + + // draw mark + skin->draw2DRectangle(this, skin->getColor(EGDC_HIGH_LIGHT), CurrentTextRect, &localClipRect); + + // draw marked text + s = txtLine->subString(lineStartPos, lineEndPos - lineStartPos); + + if (s.size()) + font->draw(s.c_str(), CurrentTextRect, + OverrideColorEnabled ? OverrideColor : skin->getColor(EGDC_HIGH_LIGHT_TEXT), + false, true, &localClipRect); + + } + } + + // Return the override color information to its previous settings. + OverrideColorEnabled = prevOver; + OverrideColor = prevColor; + } + + // draw cursor + + if (WordWrap || MultiLine) + { + cursorLine = getLineFromPos(CursorPos); + txtLine = &BrokenText[cursorLine]; + startPos = BrokenTextPositions[cursorLine]; + } + s = txtLine->subString(0,CursorPos-startPos); + charcursorpos = font->getDimension(s.c_str()).Width + + font->getKerningWidth(L"_", CursorPos-startPos > 0 ? &((*txtLine)[CursorPos-startPos-1]) : 0); + + if (focus && (porting::getTimeMs() - BlinkStartTime) % 700 < 350) + { + setTextRect(cursorLine); + CurrentTextRect.UpperLeftCorner.X += charcursorpos; + + font->draw(L"_", CurrentTextRect, + OverrideColorEnabled ? OverrideColor : skin->getColor(EGDC_BUTTON_TEXT), + false, true, &localClipRect); + } + } + + // draw children + IGUIElement::draw(); +} + + +//! Sets the new caption of this element. +void intlGUIEditBox::setText(const wchar_t* text) +{ + Text = text; + if (u32(CursorPos) > Text.size()) + CursorPos = Text.size(); + HScrollPos = 0; + breakText(); +} + + +//! Enables or disables automatic scrolling with cursor position +//! \param enable: If set to true, the text will move around with the cursor position +void intlGUIEditBox::setAutoScroll(bool enable) +{ + AutoScroll = enable; +} + + +//! Checks to see if automatic scrolling is enabled +//! \return true if automatic scrolling is enabled, false if not +bool intlGUIEditBox::isAutoScrollEnabled() const +{ + _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; + return AutoScroll; +} + + +//! Gets the area of the text in the edit box +//! \return Returns the size in pixels of the text +core::dimension2du intlGUIEditBox::getTextDimension() +{ + core::rect ret; + + setTextRect(0); + ret = CurrentTextRect; + + for (u32 i=1; i < BrokenText.size(); ++i) + { + setTextRect(i); + ret.addInternalPoint(CurrentTextRect.UpperLeftCorner); + ret.addInternalPoint(CurrentTextRect.LowerRightCorner); + } + + return core::dimension2du(ret.getSize()); +} + + +//! Sets the maximum amount of characters which may be entered in the box. +//! \param max: Maximum amount of characters. If 0, the character amount is +//! infinity. +void intlGUIEditBox::setMax(u32 max) +{ + Max = max; + + if (Text.size() > Max && Max != 0) + Text = Text.subString(0, Max); +} + + +//! Returns maximum amount of characters, previously set by setMax(); +u32 intlGUIEditBox::getMax() const +{ + return Max; +} + + +bool intlGUIEditBox::processMouse(const SEvent& event) +{ + switch(event.MouseInput.Event) + { + case irr::EMIE_LMOUSE_LEFT_UP: + if (Environment->hasFocus(this)) + { + CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y); + if (MouseMarking) + { + setTextMarkers( MarkBegin, CursorPos ); + } + MouseMarking = false; + calculateScrollPos(); + return true; + } + break; + case irr::EMIE_MOUSE_MOVED: + { + if (MouseMarking) + { + CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y); + setTextMarkers( MarkBegin, CursorPos ); + calculateScrollPos(); + return true; + } + } + break; + case EMIE_LMOUSE_PRESSED_DOWN: + if (!Environment->hasFocus(this)) + { + BlinkStartTime = porting::getTimeMs(); + MouseMarking = true; + CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y); + setTextMarkers(CursorPos, CursorPos ); + calculateScrollPos(); + return true; + } + else + { + if (!AbsoluteClippingRect.isPointInside( + core::position2d(event.MouseInput.X, event.MouseInput.Y))) + { + return false; + } + else + { + // move cursor + CursorPos = getCursorPos(event.MouseInput.X, event.MouseInput.Y); + + s32 newMarkBegin = MarkBegin; + if (!MouseMarking) + newMarkBegin = CursorPos; + + MouseMarking = true; + setTextMarkers( newMarkBegin, CursorPos); + calculateScrollPos(); + return true; + } + } + default: + break; + } + + return false; +} + + +s32 intlGUIEditBox::getCursorPos(s32 x, s32 y) +{ + IGUIFont* font = OverrideFont; + IGUISkin* skin = Environment->getSkin(); + if (!OverrideFont) + font = skin->getFont(); + + const u32 lineCount = (WordWrap || MultiLine) ? BrokenText.size() : 1; + + core::stringw *txtLine=0; + s32 startPos=0; + x+=3; + + for (u32 i=0; i < lineCount; ++i) + { + setTextRect(i); + if (i == 0 && y < CurrentTextRect.UpperLeftCorner.Y) + y = CurrentTextRect.UpperLeftCorner.Y; + if (i == lineCount - 1 && y > CurrentTextRect.LowerRightCorner.Y ) + y = CurrentTextRect.LowerRightCorner.Y; + + // is it inside this region? + if (y >= CurrentTextRect.UpperLeftCorner.Y && y <= CurrentTextRect.LowerRightCorner.Y) + { + // we've found the clicked line + txtLine = (WordWrap || MultiLine) ? &BrokenText[i] : &Text; + startPos = (WordWrap || MultiLine) ? BrokenTextPositions[i] : 0; + break; + } + } + + if (x < CurrentTextRect.UpperLeftCorner.X) + x = CurrentTextRect.UpperLeftCorner.X; + + s32 idx = font->getCharacterFromPos(Text.c_str(), x - CurrentTextRect.UpperLeftCorner.X); + + // click was on or left of the line + if (idx != -1) + return idx + startPos; + + // click was off the right edge of the line, go to end. + return txtLine->size() + startPos; +} + + +//! Breaks the single text line. +void intlGUIEditBox::breakText() +{ + IGUISkin* skin = Environment->getSkin(); + + if ((!WordWrap && !MultiLine) || !skin) + return; + + BrokenText.clear(); // need to reallocate :/ + BrokenTextPositions.set_used(0); + + IGUIFont* font = OverrideFont; + if (!OverrideFont) + font = skin->getFont(); + + if (!font) + return; + + LastBreakFont = font; + + core::stringw line; + core::stringw word; + core::stringw whitespace; + s32 lastLineStart = 0; + s32 size = Text.size(); + s32 length = 0; + s32 elWidth = RelativeRect.getWidth() - 6; + wchar_t c; + + for (s32 i=0; igetDimension(whitespace.c_str()).Width; + s32 worldlgth = font->getDimension(word.c_str()).Width; + + if (WordWrap && length + worldlgth + whitelgth > elWidth) + { + // break to next line + length = worldlgth; + BrokenText.push_back(line); + BrokenTextPositions.push_back(lastLineStart); + lastLineStart = i - (s32)word.size(); + line = word; + } + else + { + // add word to line + line += whitespace; + line += word; + length += whitelgth + worldlgth; + } + + word = L""; + whitespace = L""; + } + + whitespace += c; + + // compute line break + if (lineBreak) + { + line += whitespace; + line += word; + BrokenText.push_back(line); + BrokenTextPositions.push_back(lastLineStart); + lastLineStart = i+1; + line = L""; + word = L""; + whitespace = L""; + length = 0; + } + } + else + { + // yippee this is a word.. + word += c; + } + } + + line += whitespace; + line += word; + BrokenText.push_back(line); + BrokenTextPositions.push_back(lastLineStart); +} + + +void intlGUIEditBox::setTextRect(s32 line) +{ + core::dimension2du d; + + IGUISkin* skin = Environment->getSkin(); + if (!skin) + return; + + IGUIFont* font = OverrideFont ? OverrideFont : skin->getFont(); + + if (!font) + return; + + // get text dimension + const u32 lineCount = (WordWrap || MultiLine) ? BrokenText.size() : 1; + if (WordWrap || MultiLine) + { + d = font->getDimension(BrokenText[line].c_str()); + } + else + { + d = font->getDimension(Text.c_str()); + d.Height = AbsoluteRect.getHeight(); + } + d.Height += font->getKerningHeight(); + + // justification + switch (HAlign) + { + case EGUIA_CENTER: + // align to h centre + CurrentTextRect.UpperLeftCorner.X = (FrameRect.getWidth()/2) - (d.Width/2); + CurrentTextRect.LowerRightCorner.X = (FrameRect.getWidth()/2) + (d.Width/2); + break; + case EGUIA_LOWERRIGHT: + // align to right edge + CurrentTextRect.UpperLeftCorner.X = FrameRect.getWidth() - d.Width; + CurrentTextRect.LowerRightCorner.X = FrameRect.getWidth(); + break; + default: + // align to left edge + CurrentTextRect.UpperLeftCorner.X = 0; + CurrentTextRect.LowerRightCorner.X = d.Width; + + } + + switch (VAlign) + { + case EGUIA_CENTER: + // align to v centre + CurrentTextRect.UpperLeftCorner.Y = + (FrameRect.getHeight()/2) - (lineCount*d.Height)/2 + d.Height*line; + break; + case EGUIA_LOWERRIGHT: + // align to bottom edge + CurrentTextRect.UpperLeftCorner.Y = + FrameRect.getHeight() - lineCount*d.Height + d.Height*line; + break; + default: + // align to top edge + CurrentTextRect.UpperLeftCorner.Y = d.Height*line; + break; + } + + CurrentTextRect.UpperLeftCorner.X -= HScrollPos; + CurrentTextRect.LowerRightCorner.X -= HScrollPos; + CurrentTextRect.UpperLeftCorner.Y -= VScrollPos; + CurrentTextRect.LowerRightCorner.Y = CurrentTextRect.UpperLeftCorner.Y + d.Height; + + CurrentTextRect += FrameRect.UpperLeftCorner; + +} + + +s32 intlGUIEditBox::getLineFromPos(s32 pos) +{ + if (!WordWrap && !MultiLine) + return 0; + + s32 i=0; + while (i < (s32)BrokenTextPositions.size()) + { + if (BrokenTextPositions[i] > pos) + return i-1; + ++i; + } + return (s32)BrokenTextPositions.size() - 1; +} + + +void intlGUIEditBox::inputChar(wchar_t c) +{ + if (!IsEnabled) + return; + + if (c != 0) + { + if (Text.size() < Max || Max == 0) + { + core::stringw s; + + if (MarkBegin != MarkEnd) + { + // replace marked text + const s32 realmbgn = MarkBegin < MarkEnd ? MarkBegin : MarkEnd; + const s32 realmend = MarkBegin < MarkEnd ? MarkEnd : MarkBegin; + + s = Text.subString(0, realmbgn); + s.append(c); + s.append( Text.subString(realmend, Text.size()-realmend) ); + Text = s; + CursorPos = realmbgn+1; + } + else + { + // add new character + s = Text.subString(0, CursorPos); + s.append(c); + s.append( Text.subString(CursorPos, Text.size()-CursorPos) ); + Text = s; + ++CursorPos; + } + + BlinkStartTime = porting::getTimeMs(); + setTextMarkers(0, 0); + } + } + breakText(); + sendGuiEvent(EGET_EDITBOX_CHANGED); + calculateScrollPos(); +} + + +void intlGUIEditBox::calculateScrollPos() +{ + if (!AutoScroll) + return; + + // calculate horizontal scroll position + s32 cursLine = getLineFromPos(CursorPos); + setTextRect(cursLine); + + // don't do horizontal scrolling when wordwrap is enabled. + if (!WordWrap) + { + // get cursor position + IGUISkin* skin = Environment->getSkin(); + if (!skin) + return; + IGUIFont* font = OverrideFont ? OverrideFont : skin->getFont(); + if (!font) + return; + + core::stringw *txtLine = MultiLine ? &BrokenText[cursLine] : &Text; + s32 cPos = MultiLine ? CursorPos - BrokenTextPositions[cursLine] : CursorPos; + + s32 cStart = CurrentTextRect.UpperLeftCorner.X + HScrollPos + + font->getDimension(txtLine->subString(0, cPos).c_str()).Width; + + s32 cEnd = cStart + font->getDimension(L"_ ").Width; + + if (FrameRect.LowerRightCorner.X < cEnd) + HScrollPos = cEnd - FrameRect.LowerRightCorner.X; + else if (FrameRect.UpperLeftCorner.X > cStart) + HScrollPos = cStart - FrameRect.UpperLeftCorner.X; + else + HScrollPos = 0; + + // todo: adjust scrollbar + } + + // vertical scroll position + if (FrameRect.LowerRightCorner.Y < CurrentTextRect.LowerRightCorner.Y + VScrollPos) + VScrollPos = CurrentTextRect.LowerRightCorner.Y - FrameRect.LowerRightCorner.Y + VScrollPos; + + else if (FrameRect.UpperLeftCorner.Y > CurrentTextRect.UpperLeftCorner.Y + VScrollPos) + VScrollPos = CurrentTextRect.UpperLeftCorner.Y - FrameRect.UpperLeftCorner.Y + VScrollPos; + else + VScrollPos = 0; + + // todo: adjust scrollbar +} + +//! set text markers +void intlGUIEditBox::setTextMarkers(s32 begin, s32 end) +{ + if ( begin != MarkBegin || end != MarkEnd ) + { + MarkBegin = begin; + MarkEnd = end; + sendGuiEvent(EGET_EDITBOX_MARKING_CHANGED); + } +} + +//! send some gui event to parent +void intlGUIEditBox::sendGuiEvent(EGUI_EVENT_TYPE type) +{ + if ( Parent ) + { + SEvent e; + e.EventType = EET_GUI_EVENT; + e.GUIEvent.Caller = this; + e.GUIEvent.Element = 0; + e.GUIEvent.EventType = type; + + Parent->OnEvent(e); + } +} + +//! Writes attributes of the element. +void intlGUIEditBox::serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const +{ + // IGUIEditBox::serializeAttributes(out,options); + + out->addBool ("OverrideColorEnabled",OverrideColorEnabled ); + out->addColor ("OverrideColor", OverrideColor); + // out->addFont("OverrideFont",OverrideFont); + out->addInt ("MaxChars", Max); + out->addBool ("WordWrap", WordWrap); + out->addBool ("MultiLine", MultiLine); + out->addBool ("AutoScroll", AutoScroll); + out->addBool ("PasswordBox", PasswordBox); + core::stringw ch = L" "; + ch[0] = PasswordChar; + out->addString("PasswordChar", ch.c_str()); + out->addEnum ("HTextAlign", HAlign, GUIAlignmentNames); + out->addEnum ("VTextAlign", VAlign, GUIAlignmentNames); + + IGUIEditBox::serializeAttributes(out,options); +} + + +//! Reads attributes of the element +void intlGUIEditBox::deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0) +{ + IGUIEditBox::deserializeAttributes(in,options); + + setOverrideColor(in->getAttributeAsColor("OverrideColor")); + enableOverrideColor(in->getAttributeAsBool("OverrideColorEnabled")); + setMax(in->getAttributeAsInt("MaxChars")); + setWordWrap(in->getAttributeAsBool("WordWrap")); + setMultiLine(in->getAttributeAsBool("MultiLine")); + setAutoScroll(in->getAttributeAsBool("AutoScroll")); + core::stringw ch = in->getAttributeAsStringW("PasswordChar"); + + if (!ch.size()) + setPasswordBox(in->getAttributeAsBool("PasswordBox")); + else + setPasswordBox(in->getAttributeAsBool("PasswordBox"), ch[0]); + + setTextAlignment( (EGUI_ALIGNMENT) in->getAttributeAsEnumeration("HTextAlign", GUIAlignmentNames), + (EGUI_ALIGNMENT) in->getAttributeAsEnumeration("VTextAlign", GUIAlignmentNames)); + + // setOverrideFont(in->getAttributeAsFont("OverrideFont")); +} + + +} // end namespace gui +} // end namespace irr + +#endif // _IRR_COMPILE_WITH_GUI_ diff --git a/src/intlGUIEditBox.h b/src/intlGUIEditBox.h new file mode 100644 index 00000000..e3ee15a3 --- /dev/null +++ b/src/intlGUIEditBox.h @@ -0,0 +1,178 @@ +// Copyright (C) 2002-2013 Nikolaus Gebhardt +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in irrlicht.h + +#ifndef __C_INTL_GUI_EDIT_BOX_H_INCLUDED__ +#define __C_INTL_GUI_EDIT_BOX_H_INCLUDED__ + +#include "IrrCompileConfig.h" +//#ifdef _IRR_COMPILE_WITH_GUI_ + +#include "IGUIEditBox.h" +#include "irrArray.h" +#include "IOSOperator.h" + +namespace irr +{ +namespace gui +{ + class intlGUIEditBox : public IGUIEditBox + { + public: + + //! constructor + intlGUIEditBox(const wchar_t* text, bool border, IGUIEnvironment* environment, + IGUIElement* parent, s32 id, const core::rect& rectangle); + + //! destructor + virtual ~intlGUIEditBox(); + + //! Sets another skin independent font. + virtual void setOverrideFont(IGUIFont* font=0); + + //! Gets the override font (if any) + /** \return The override font (may be 0) */ + virtual IGUIFont* getOverrideFont() const; + + //! Get the font which is used right now for drawing + /** Currently this is the override font when one is set and the + font of the active skin otherwise */ + virtual IGUIFont* getActiveFont() const; + + //! Sets another color for the text. + virtual void setOverrideColor(video::SColor color); + + //! Gets the override color + virtual video::SColor getOverrideColor() const; + + //! Sets if the text should use the overide color or the + //! color in the gui skin. + virtual void enableOverrideColor(bool enable); + + //! Checks if an override color is enabled + /** \return true if the override color is enabled, false otherwise */ + virtual bool isOverrideColorEnabled(void) const; + + //! Sets whether to draw the background + virtual void setDrawBackground(bool draw); + + //! Turns the border on or off + virtual void setDrawBorder(bool border); + + //! Enables or disables word wrap for using the edit box as multiline text editor. + virtual void setWordWrap(bool enable); + + //! Checks if word wrap is enabled + //! \return true if word wrap is enabled, false otherwise + virtual bool isWordWrapEnabled() const; + + //! Enables or disables newlines. + /** \param enable: If set to true, the EGET_EDITBOX_ENTER event will not be fired, + instead a newline character will be inserted. */ + virtual void setMultiLine(bool enable); + + //! Checks if multi line editing is enabled + //! \return true if mult-line is enabled, false otherwise + virtual bool isMultiLineEnabled() const; + + //! Enables or disables automatic scrolling with cursor position + //! \param enable: If set to true, the text will move around with the cursor position + virtual void setAutoScroll(bool enable); + + //! Checks to see if automatic scrolling is enabled + //! \return true if automatic scrolling is enabled, false if not + virtual bool isAutoScrollEnabled() const; + + //! Gets the size area of the text in the edit box + //! \return Returns the size in pixels of the text + virtual core::dimension2du getTextDimension(); + + //! Sets text justification + virtual void setTextAlignment(EGUI_ALIGNMENT horizontal, EGUI_ALIGNMENT vertical); + + //! called if an event happened. + virtual bool OnEvent(const SEvent& event); + + //! draws the element and its children + virtual void draw(); + + //! Sets the new caption of this element. + virtual void setText(const wchar_t* text); + + //! Sets the maximum amount of characters which may be entered in the box. + //! \param max: Maximum amount of characters. If 0, the character amount is + //! infinity. + virtual void setMax(u32 max); + + //! Returns maximum amount of characters, previously set by setMax(); + virtual u32 getMax() const; + + //! Sets whether the edit box is a password box. Setting this to true will + /** disable MultiLine, WordWrap and the ability to copy with ctrl+c or ctrl+x + \param passwordBox: true to enable password, false to disable + \param passwordChar: the character that is displayed instead of letters */ + virtual void setPasswordBox(bool passwordBox, wchar_t passwordChar = L'*'); + + //! Returns true if the edit box is currently a password box. + virtual bool isPasswordBox() const; + + //! Updates the absolute position, splits text if required + virtual void updateAbsolutePosition(); + + //! Writes attributes of the element. + virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options) const; + + //! Reads attributes of the element + virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options); + + protected: + //! Breaks the single text line. + void breakText(); + //! sets the area of the given line + void setTextRect(s32 line); + //! returns the line number that the cursor is on + s32 getLineFromPos(s32 pos); + //! adds a letter to the edit box + void inputChar(wchar_t c); + //! calculates the current scroll position + void calculateScrollPos(); + //! send some gui event to parent + void sendGuiEvent(EGUI_EVENT_TYPE type); + //! set text markers + void setTextMarkers(s32 begin, s32 end); + + bool processKey(const SEvent& event); + bool processMouse(const SEvent& event); + s32 getCursorPos(s32 x, s32 y); + + bool MouseMarking; + bool Border; + bool OverrideColorEnabled; + s32 MarkBegin; + s32 MarkEnd; + + video::SColor OverrideColor; + gui::IGUIFont *OverrideFont, *LastBreakFont; + IOSOperator* Operator; + + u32 BlinkStartTime; + s32 CursorPos; + s32 HScrollPos, VScrollPos; // scroll position in characters + u32 Max; + + bool WordWrap, MultiLine, AutoScroll, PasswordBox; + wchar_t PasswordChar; + EGUI_ALIGNMENT HAlign, VAlign; + + core::array< core::stringw > BrokenText; + core::array< s32 > BrokenTextPositions; + + core::rect CurrentTextRect, FrameRect; // temporary values + }; + + +} // end namespace gui +} // end namespace irr + +//#endif // _IRR_COMPILE_WITH_GUI_ +#endif // __C_GUI_EDIT_BOX_H_INCLUDED__ diff --git a/src/inventory.cpp b/src/inventory.cpp index 401da88e..e59234f6 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -126,7 +126,7 @@ ItemStack::ItemStack(std::string name_, u16 count_, void ItemStack::serialize(std::ostream &os) const { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); if(empty()) return; @@ -151,7 +151,7 @@ void ItemStack::serialize(std::ostream &os) const void ItemStack::deSerialize(std::istream &is, IItemDefManager *itemdef) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); clear(); @@ -163,7 +163,7 @@ void ItemStack::deSerialize(std::istream &is, IItemDefManager *itemdef) std::getline(is, tmp, ' '); if(!tmp.empty()) throw SerializationError("Unexpected text after item name"); - + if(name == "MaterialItem") { // Obsoleted on 2011-07-30 @@ -478,7 +478,7 @@ void InventoryList::setName(const std::string &name) void InventoryList::serialize(std::ostream &os) const { //os.imbue(std::locale("C")); - + os<<"Width "<::const_reverse_iterator i = m_items.rbegin(); - i != m_items.rend(); i++) + i != m_items.rend(); ++i) { if(count == 0) break; @@ -750,7 +750,7 @@ ItemStack InventoryList::removeItem(const ItemStack &item) ItemStack removed; for(std::vector::reverse_iterator i = m_items.rbegin(); - i != m_items.rend(); i++) + i != m_items.rend(); ++i) { if(i->name == item.name) { @@ -782,10 +782,46 @@ ItemStack InventoryList::peekItem(u32 i, u32 peekcount) const return m_items[i].peekItem(peekcount); } -void InventoryList::moveItem(u32 i, InventoryList *dest, u32 dest_i, u32 count) +void InventoryList::moveItemSomewhere(u32 i, InventoryList *dest, u32 count) +{ + // Take item from source list + ItemStack item1; + if (count == 0) + item1 = changeItem(i, ItemStack()); + else + item1 = takeItem(i, count); + + if (item1.empty()) + return; + + // Try to add the item to destination list + u32 dest_size = dest->getSize(); + // First try all the non-empty slots + for (u32 dest_i = 0; dest_i < dest_size; dest_i++) { + if (!m_items[dest_i].empty()) { + item1 = dest->addItem(dest_i, item1); + if (item1.empty()) return; + } + } + + // Then try all the empty ones + for (u32 dest_i = 0; dest_i < dest_size; dest_i++) { + if (m_items[dest_i].empty()) { + item1 = dest->addItem(dest_i, item1); + if (item1.empty()) return; + } + } + + // If we reach this, the item was not fully added + // Add the remaining part back to the source item + addItem(i, item1); +} + +u32 InventoryList::moveItem(u32 i, InventoryList *dest, u32 dest_i, + u32 count, bool swap_if_needed, bool *did_swap) { if(this == dest && i == dest_i) - return; + return count; // Take item from source list ItemStack item1; @@ -795,7 +831,7 @@ void InventoryList::moveItem(u32 i, InventoryList *dest, u32 dest_i, u32 count) item1 = takeItem(i, count); if(item1.empty()) - return; + return 0; // Try to add the item to destination list u32 oldcount = item1.count; @@ -813,8 +849,11 @@ void InventoryList::moveItem(u32 i, InventoryList *dest, u32 dest_i, u32 count) // If olditem is returned, nothing was added. // Swap the items - if(nothing_added) - { + if (nothing_added && swap_if_needed) { + // Tell that we swapped + if (did_swap != NULL) { + *did_swap = true; + } // Take item from source list item1 = changeItem(i, ItemStack()); // Adding was not possible, swap the items. @@ -823,6 +862,7 @@ void InventoryList::moveItem(u32 i, InventoryList *dest, u32 dest_i, u32 count) changeItem(i, item2); } } + return (oldcount - item1.count); } /* diff --git a/src/inventory.h b/src/inventory.h index e8e48b76..339dc3a8 100644 --- a/src/inventory.h +++ b/src/inventory.h @@ -244,7 +244,13 @@ public: // Move an item to a different list (or a different stack in the same list) // count is the maximum number of items to move (0 for everything) - void moveItem(u32 i, InventoryList *dest, u32 dest_i, u32 count = 0); + // returns number of moved items + u32 moveItem(u32 i, InventoryList *dest, u32 dest_i, + u32 count = 0, bool swap_if_needed = true, bool *did_swap = NULL); + + // like moveItem, but without a fixed destination index + // also with optional rollback recording + void moveItemSomewhere(u32 i, InventoryList *dest, u32 count); private: std::vector m_items; diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp index c34c69c7..aa8854ec 100644 --- a/src/inventorymanager.cpp +++ b/src/inventorymanager.cpp @@ -121,16 +121,13 @@ InventoryAction * InventoryAction::deSerialize(std::istream &is) InventoryAction *a = NULL; - if(type == "Move") - { - a = new IMoveAction(is); - } - else if(type == "Drop") - { + if (type == "Move") { + a = new IMoveAction(is, false); + } else if (type == "MoveSomewhere") { + a = new IMoveAction(is, true); + } else if (type == "Drop") { a = new IDropAction(is); - } - else if(type == "Craft") - { + } else if(type == "Craft") { a = new ICraftAction(is); } @@ -141,9 +138,12 @@ InventoryAction * InventoryAction::deSerialize(std::istream &is) IMoveAction */ -IMoveAction::IMoveAction(std::istream &is) +IMoveAction::IMoveAction(std::istream &is, bool somewhere) { std::string ts; + move_somewhere = somewhere; + caused_by_move_somewhere = false; + move_count = 0; std::getline(is, ts, ' '); count = stoi(ts); @@ -161,25 +161,27 @@ IMoveAction::IMoveAction(std::istream &is) std::getline(is, to_list, ' '); - std::getline(is, ts, ' '); - to_i = stoi(ts); + if (!somewhere) { + std::getline(is, ts, ' '); + to_i = stoi(ts); + } } void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGameDef *gamedef) { Inventory *inv_from = mgr->getInventory(from_inv); Inventory *inv_to = mgr->getInventory(to_inv); - - if(!inv_from){ - infostream<<"IMoveAction::apply(): FAIL: source inventory not found: " - <<"from_inv=\""<getSize(); + // First try all the non-empty slots + for (s16 dest_i = 0; dest_i < dest_size && count > 0; dest_i++) { + if (!list_to->getItem(dest_i).empty()) { + to_i = dest_i; + apply(mgr, player, gamedef); + count -= move_count; + } + } + + // Then try all the empty ones + for (s16 dest_i = 0; dest_i < dest_size && count > 0; dest_i++) { + if (list_to->getItem(dest_i).empty()) { + to_i = dest_i; + apply(mgr, player, gamedef); + count -= move_count; + } + } + + to_i = old_to_i; + count = old_count; + caused_by_move_somewhere = false; + move_somewhere = true; + return; + } + + if ((u16)to_i > list_to->getSize()) { + infostream << "IMoveAction::apply(): FAIL: destination index out of bounds: " + << "to_i=" << to_i + << ", size=" << list_to->getSize() << std::endl; + return; + } /* Do not handle rollback if both inventories are that of the same player */ @@ -220,7 +271,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame int src_can_take_count = 0xffff; int dst_can_put_count = 0xffff; - + /* Query detached inventories */ // Move occurs in the same detached inventory @@ -287,7 +338,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame } int old_count = count; - + /* Modify count according to collected data */ count = try_take_count; if(src_can_take_count != -1 && count > src_can_take_count) @@ -297,7 +348,7 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame /* Limit according to source item count */ if(count > list_from->getItem(from_i).count) count = list_from->getItem(from_i).count; - + /* If no items will be moved, don't go further */ if(count == 0) { @@ -324,24 +375,33 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame If something is wrong (source item is empty, destination is the same as source), nothing happens */ - list_from->moveItem(from_i, list_to, to_i, count); + bool did_swap = false; + move_count = list_from->moveItem(from_i, + list_to, to_i, count, !caused_by_move_somewhere, &did_swap); // If source is infinite, reset it's stack - if(src_can_take_count == -1){ - // If destination stack is of different type and there are leftover - // items, attempt to put the leftover items to a different place in the - // destination inventory. - // The client-side GUI will try to guess if this happens. - if(from_stack_was.name != to_stack_was.name){ - for(u32 i=0; igetSize(); i++){ - if(list_to->getItem(i).empty()){ - list_to->changeItem(i, to_stack_was); - break; + if (src_can_take_count == -1) { + // For the caused_by_move_somewhere == true case we didn't force-put the item, + // which guarantees there is no leftover, and code below would duplicate the + // (not replaced) to_stack_was item. + if (!caused_by_move_somewhere) { + // If destination stack is of different type and there are leftover + // items, attempt to put the leftover items to a different place in the + // destination inventory. + // The client-side GUI will try to guess if this happens. + if (from_stack_was.name != to_stack_was.name) { + for (u32 i = 0; i < list_to->getSize(); i++) { + if (list_to->getItem(i).empty()) { + list_to->changeItem(i, to_stack_was); + break; + } } } } - list_from->deleteItem(from_i); - list_from->addItem(from_i, from_stack_was); + if (move_count > 0 || did_swap) { + list_from->deleteItem(from_i); + list_from->addItem(from_i, from_stack_was); + } } // If destination is infinite, reset it's stack and take count from source if(dst_can_put_count == -1){ @@ -352,15 +412,24 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame list_from->takeItem(from_i, count); } - infostream<<"IMoveAction::apply(): moved" - <<" count="<getItem(from_i); @@ -587,7 +659,7 @@ void IDropAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame infostream<<"Actually dropped no items"<getList("craft"); InventoryList *list_craftresult = inv_craft->getList("craftresult"); + InventoryList *list_main = inv_craft->getList("main"); /* If a list doesn't exist or the source item doesn't exist */ - if(!list_craft){ - infostream<<"ICraftAction::apply(): FAIL: craft list not found: " - <<"craft_inv=\""<getSize() < 1){ - infostream<<"ICraftAction::apply(): FAIL: craftresult list too short: " - <<"craft_inv=\""<getSize() < 1) { + infostream << "ICraftAction::apply(): FAIL: craftresult list too short: " + << "craft_inv=\"" << craft_inv.dump() << "\"" << std::endl; return; } ItemStack crafted; ItemStack craftresultitem; int count_remaining = count; - getCraftingResult(inv_craft, crafted, false, gamedef); + std::vector output_replacements; + getCraftingResult(inv_craft, crafted, output_replacements, false, gamedef); PLAYER_TO_SA(player)->item_CraftPredict(crafted, player, list_craft, craft_inv); bool found = !crafted.empty(); - while(found && list_craftresult->itemFits(0, crafted)) - { + while (found && list_craftresult->itemFits(0, crafted)) { InventoryList saved_craft_list = *list_craft; - + + std::vector temp; // Decrement input and add crafting output - getCraftingResult(inv_craft, crafted, true, gamedef); + getCraftingResult(inv_craft, crafted, temp, true, gamedef); PLAYER_TO_SA(player)->item_OnCraft(crafted, player, &saved_craft_list, craft_inv); list_craftresult->addItem(0, crafted); mgr->setInventoryModified(craft_inv); - actionstream<getDescription() - <<" crafts " - <getItemDefManager(); + for (std::vector::iterator it = temp.begin(); + it != temp.end(); ++it) { + for (std::vector::iterator jt = output_replacements.begin(); + jt != output_replacements.end(); ++jt) { + if (it->name == jt->name) { + *it = jt->addItem(*it, itemdef); + if (it->empty()) + continue; + } + } + output_replacements.push_back(*it); + } + + actionstream << player->getDescription() + << " crafts " + << crafted.getItemString() + << std::endl; // Decrement counter - if(count_remaining == 1) + if (count_remaining == 1) break; - else if(count_remaining > 1) + else if (count_remaining > 1) count_remaining--; // Get next crafting result - found = getCraftingResult(inv_craft, crafted, false, gamedef); + found = getCraftingResult(inv_craft, crafted, temp, false, gamedef); PLAYER_TO_SA(player)->item_CraftPredict(crafted, player, list_craft, craft_inv); found = !crafted.empty(); } + // Put the replacements in the inventory or drop them on the floor, if + // the invenotry is full + for (std::vector::iterator it = output_replacements.begin(); + it != output_replacements.end(); ++it) { + if (list_main) + *it = list_main->addItem(*it); + if (it->empty()) + continue; + u16 count = it->count; + do { + PLAYER_TO_SA(player)->item_OnDrop(*it, player, + player->getBasePosition() + v3f(0,1,0)); + if (count >= it->count) { + errorstream << "Couldn't drop replacement stack " << + it->getItemString() << " because drop loop didn't " + "decrease count." << std::endl; + + break; + } + } while (!it->empty()); + } + infostream<<"ICraftAction::apply(): crafted " <<" craft_inv=\""< &output_replacements, bool decrementInput, IGameDef *gamedef) { - DSTACK(__FUNCTION_NAME); - + DSTACK(FUNCTION_NAME); + result.clear(); // Get the InventoryList in which we will operate @@ -792,7 +905,7 @@ bool getCraftingResult(Inventory *inv, ItemStack& result, // Find out what is crafted and add it to result item slot CraftOutput co; bool found = gamedef->getCraftDefManager()->getCraftResult( - ci, co, decrementInput, gamedef); + ci, co, output_replacements, decrementInput, gamedef); if(found) result.deSerialize(co.item, gamedef->getItemDefManager()); diff --git a/src/inventorymanager.h b/src/inventorymanager.h index c7f769da..4c76b860 100644 --- a/src/inventorymanager.h +++ b/src/inventorymanager.h @@ -108,7 +108,7 @@ class InventoryManager public: InventoryManager(){} virtual ~InventoryManager(){} - + // Get an inventory (server and client) virtual Inventory* getInventory(const InventoryLocation &loc){return NULL;} // Set modified (will be saved and sent over network; only on server) @@ -124,7 +124,7 @@ public: struct InventoryAction { static InventoryAction * deSerialize(std::istream &is); - + virtual u16 getType() const = 0; virtual void serialize(std::ostream &os) const = 0; virtual void apply(InventoryManager *mgr, ServerActiveObject *player, @@ -143,15 +143,24 @@ struct IMoveAction : public InventoryAction InventoryLocation to_inv; std::string to_list; s16 to_i; - + bool move_somewhere; + + // treat these as private + // related to movement to somewhere + bool caused_by_move_somewhere; + u32 move_count; + IMoveAction() { count = 0; from_i = -1; to_i = -1; + move_somewhere = false; + caused_by_move_somewhere = false; + move_count = 0; } - - IMoveAction(std::istream &is); + + IMoveAction(std::istream &is, bool somewhere); u16 getType() const { @@ -160,14 +169,18 @@ struct IMoveAction : public InventoryAction void serialize(std::ostream &os) const { - os<<"Move "; - os< &output_replacements, bool decrementInput, IGameDef *gamedef); #endif diff --git a/src/irrlichttypes.h b/src/irrlichttypes.h index ef486907..9f37f372 100644 --- a/src/irrlichttypes.h +++ b/src/irrlichttypes.h @@ -48,4 +48,19 @@ using namespace irr; #endif #endif +#define S8_MIN (-0x7F - 1) +#define S16_MIN (-0x7FFF - 1) +#define S32_MIN (-0x7FFFFFFF - 1) +#define S64_MIN (-0x7FFFFFFFFFFFFFFF - 1) + +#define S8_MAX 0x7F +#define S16_MAX 0x7FFF +#define S32_MAX 0x7FFFFFFF +#define S64_MAX 0x7FFFFFFFFFFFFFFF + +#define U8_MAX 0xFF +#define U16_MAX 0xFFFF +#define U32_MAX 0xFFFFFFFF +#define U64_MAX 0xFFFFFFFFFFFFFFFF + #endif diff --git a/src/itemdef.cpp b/src/itemdef.cpp index 5ed36c2f..d0c68fbf 100644 --- a/src/itemdef.cpp +++ b/src/itemdef.cpp @@ -145,7 +145,7 @@ void ItemDefinition::serialize(std::ostream &os, u16 protocol_version) const os<::const_iterator - i = groups.begin(); i != groups.end(); i++){ + i = groups.begin(); i != groups.end(); ++i){ os<first); writeS16(os, i->second); } @@ -241,7 +241,7 @@ public: { #ifndef SERVER - m_main_thread = get_current_thread_id(); + m_main_thread = thr_get_current_thread_id(); #endif clear(); } @@ -261,7 +261,7 @@ public: #endif for (std::map::iterator iter = m_item_definitions.begin(); iter != m_item_definitions.end(); - iter ++) { + ++iter) { delete iter->second; } m_item_definitions.clear(); @@ -317,7 +317,7 @@ public: <::const_iterator i = m_item_definitions.begin(); - i != m_item_definitions.end(); i++) + i != m_item_definitions.end(); ++i) { delete i->second; } diff --git a/src/jthread/CMakeLists.txt b/src/jthread/CMakeLists.txt deleted file mode 100644 index cebb35ca..00000000 --- a/src/jthread/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -if(UNIX) - set(THREAD_SYS_DIR pthread) -else() - set(THREAD_SYS_DIR win32) -endif() - -set(SRC_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/${THREAD_SYS_DIR}) -set(JTHREAD_SRCS - ${SRC_PREFIX}/jmutex.cpp - ${SRC_PREFIX}/jthread.cpp - ${SRC_PREFIX}/jsemaphore.cpp - ${SRC_PREFIX}/jevent.cpp - PARENT_SCOPE) - diff --git a/src/jthread/jevent.h b/src/jthread/jevent.h deleted file mode 100644 index 9ea7ebde..00000000 --- a/src/jthread/jevent.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ - -#ifndef JEVENT_H_ -#define JEVENT_H_ - -#ifdef _WIN32 -#include -#elif defined(__MACH__) && defined(__APPLE__) -#include -#include -#include -#include -#else -#include -#endif - - -class Event { -#ifdef _WIN32 - HANDLE hEvent; -#elif defined(__MACH__) && defined(__APPLE__) - semaphore_t sem; -#else - sem_t sem; -#endif - -public: - Event(); - ~Event(); - void wait(); - void signal(); -}; - -#endif /* JEVENT_H_ */ diff --git a/src/jthread/jmutex.h b/src/jthread/jmutex.h deleted file mode 100644 index e57cd8a4..00000000 --- a/src/jthread/jmutex.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ - -#ifndef JMUTEX_H - -#define JMUTEX_H - -#if (defined(WIN32) || defined(_WIN32_WCE)) - #ifndef _WIN32_WINNT - #define _WIN32_WINNT 0x0501 - #endif - #ifndef _WIN32_WCE - #include - #endif // _WIN32_WCE - #include - #include - // CriticalSection is way faster than the alternative - #define JMUTEX_CRITICALSECTION -#else // using pthread - #include -#endif // WIN32 - -#define ERR_JMUTEX_ALREADYINIT -1 -#define ERR_JMUTEX_NOTINIT -2 -#define ERR_JMUTEX_CANTCREATEMUTEX -3 - -class JMutex -{ -public: - JMutex(); - ~JMutex(); - int Lock(); - int Unlock(); - -private: -#if (defined(WIN32) || defined(_WIN32_WCE)) -#ifdef JMUTEX_CRITICALSECTION - CRITICAL_SECTION mutex; -#else // Use standard mutex - HANDLE mutex; -#endif // JMUTEX_CRITICALSECTION -#else // pthread mutex - pthread_mutex_t mutex; - - bool IsLocked() { - if (pthread_mutex_trylock(&mutex)) { - pthread_mutex_unlock(&mutex); - return true; - } - return false; - } -#endif // WIN32 -}; - -#endif // JMUTEX_H diff --git a/src/jthread/jmutexautolock.h b/src/jthread/jmutexautolock.h deleted file mode 100644 index 6020a5c3..00000000 --- a/src/jthread/jmutexautolock.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ - -#ifndef JMUTEXAUTOLOCK_H - -#define JMUTEXAUTOLOCK_H - -#include "jmutex.h" - -class JMutexAutoLock -{ -public: - JMutexAutoLock(JMutex &m) : mutex(m) { mutex.Lock(); } - ~JMutexAutoLock() { mutex.Unlock(); } -private: - JMutex &mutex; -}; - -#endif // JMUTEXAUTOLOCK_H diff --git a/src/jthread/jthread.h b/src/jthread/jthread.h deleted file mode 100644 index 89743a3e..00000000 --- a/src/jthread/jthread.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ - -#ifndef JTHREAD_H -#define JTHREAD_H - -#if __cplusplus >= 201103L -#include -#endif - -#include "jthread/jmutex.h" - -#define ERR_JTHREAD_CANTINITMUTEX -1 -#define ERR_JTHREAD_CANTSTARTTHREAD -2 -#define ERR_JTHREAD_THREADFUNCNOTSET -3 -#define ERR_JTHREAD_NOTRUNNING -4 -#define ERR_JTHREAD_ALREADYRUNNING -5 - -class JThread -{ -public: - JThread(); - virtual ~JThread(); - int Start(); - inline void Stop() - { requeststop = true; } - int Kill(); - virtual void *Thread() = 0; - inline bool IsRunning() - { return running; } - inline bool StopRequested() - { return requeststop; } - void *GetReturnValue(); - bool IsSameThread(); - - /* - * Wait for thread to finish - * Note: this does not stop a thread you have to do this on your own - * WARNING: never ever call this on a thread not started or already killed! - */ - void Wait(); -protected: - void ThreadStarted(); -private: - -#if (defined(WIN32) || defined(_WIN32_WCE)) -#ifdef _WIN32_WCE - DWORD threadid; - static DWORD WINAPI TheThread(void *param); -#else - static UINT __stdcall TheThread(void *param); - UINT threadid; -#endif // _WIN32_WCE - HANDLE threadhandle; -#else // pthread type threads - static void *TheThread(void *param); - - pthread_t threadid; - - /* - * reading and writing bool values is atomic on all relevant architectures - * ( x86 + arm ). No need to waste time for locking here. - * once C++11 is supported we can tell compiler to handle cpu caches correct - * too. This should cause additional improvement (and silence thread - * concurrency check tools. - */ -#if __cplusplus >= 201103L - std::atomic_bool started; -#else - bool started; -#endif -#endif // WIN32 - void *retval; - /* - * reading and writing bool values is atomic on all relevant architectures - * ( x86 + arm ). No need to waste time for locking here. - * once C++11 is supported we can tell compiler to handle cpu caches correct - * too. This should cause additional improvement (and silence thread - * concurrency check tools. - */ -#if __cplusplus >= 201103L - std::atomic_bool running; - std::atomic_bool requeststop; -#else - bool running; - bool requeststop; -#endif - - JMutex continuemutex,continuemutex2; -}; - -#endif // JTHREAD_H - diff --git a/src/jthread/pthread/jevent.cpp b/src/jthread/pthread/jevent.cpp deleted file mode 100644 index e1d40f4c..00000000 --- a/src/jthread/pthread/jevent.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ -#include -#include "jthread/jevent.h" - -#define UNUSED(expr) do { (void)(expr); } while (0) - -#if defined(__MACH__) && defined(__APPLE__) -#undef sem_t -#define sem_t semaphore_t -#undef sem_init -#define sem_init(s, p, c) semaphore_create(mach_task_self(), (s), 0, (c)) -#undef sem_wait -#define sem_wait(s) semaphore_wait(*(s)) -#undef sem_post -#define sem_post(s) semaphore_signal(*(s)) -#undef sem_destroy -#define sem_destroy(s) semaphore_destroy(mach_task_self(), *(s)) -#endif - -Event::Event() { - int sem_init_retval = sem_init(&sem, 0, 0); - assert(sem_init_retval == 0); - UNUSED(sem_init_retval); -} - -Event::~Event() { - int sem_destroy_retval = sem_destroy(&sem); - assert(sem_destroy_retval == 0); - UNUSED(sem_destroy_retval); -} - -void Event::wait() { - int sem_wait_retval = sem_wait(&sem); - assert(sem_wait_retval == 0); - UNUSED(sem_wait_retval); -} - -void Event::signal() { - int sem_post_retval = sem_post(&sem); - assert(sem_post_retval == 0); - UNUSED(sem_post_retval); -} diff --git a/src/jthread/pthread/jmutex.cpp b/src/jthread/pthread/jmutex.cpp deleted file mode 100644 index 0551b972..00000000 --- a/src/jthread/pthread/jmutex.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ -#include -#include "jthread/jmutex.h" -#define UNUSED(expr) do { (void)(expr); } while (0) -JMutex::JMutex() -{ - int mutex_init_retval = pthread_mutex_init(&mutex,NULL); - assert( mutex_init_retval == 0 ); - UNUSED(mutex_init_retval); -} - -JMutex::~JMutex() -{ - int mutex_dextroy_retval = pthread_mutex_destroy(&mutex); - assert( mutex_dextroy_retval == 0 ); - UNUSED(mutex_dextroy_retval); -} - -int JMutex::Lock() -{ - int mutex_lock_retval = pthread_mutex_lock(&mutex); - assert( mutex_lock_retval == 0 ); - return mutex_lock_retval; - UNUSED(mutex_lock_retval); -} - -int JMutex::Unlock() -{ - int mutex_unlock_retval = pthread_mutex_unlock(&mutex); - assert( mutex_unlock_retval == 0 ); - return mutex_unlock_retval; - UNUSED(mutex_unlock_retval); -} diff --git a/src/jthread/pthread/jthread.cpp b/src/jthread/pthread/jthread.cpp deleted file mode 100644 index 414d8fde..00000000 --- a/src/jthread/pthread/jthread.cpp +++ /dev/null @@ -1,168 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ - -#include "jthread/jthread.h" -#include -#include -#include -#include - -#define UNUSED(expr) do { (void)(expr); } while (0) - -JThread::JThread() -{ - retval = NULL; - requeststop = false; - running = false; - started = false; -} - -JThread::~JThread() -{ - Kill(); -} - -void JThread::Wait() { - void* status; - if (started) { - int pthread_join_retval = pthread_join(threadid,&status); - assert(pthread_join_retval == 0); - UNUSED(pthread_join_retval); - started = false; - } -} - -int JThread::Start() -{ - int status; - - if (running) - { - return ERR_JTHREAD_ALREADYRUNNING; - } - requeststop = false; - - pthread_attr_t attr; - pthread_attr_init(&attr); - //pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); - - continuemutex.Lock(); - status = pthread_create(&threadid,&attr,TheThread,this); - pthread_attr_destroy(&attr); - if (status != 0) - { - continuemutex.Unlock(); - return ERR_JTHREAD_CANTSTARTTHREAD; - } - - /* Wait until 'running' is set */ - - while (!running) - { - struct timespec req,rem; - - req.tv_sec = 0; - req.tv_nsec = 1000000; - nanosleep(&req,&rem); - } - started = true; - - continuemutex.Unlock(); - - continuemutex2.Lock(); - continuemutex2.Unlock(); - return 0; -} - -int JThread::Kill() -{ - void* status; - if (!running) - { - if (started) { - int pthread_join_retval = pthread_join(threadid,&status); - assert(pthread_join_retval == 0); - UNUSED(pthread_join_retval); - started = false; - } - return ERR_JTHREAD_NOTRUNNING; - } -#ifdef __ANDROID__ - pthread_kill(threadid, SIGKILL); -#else - pthread_cancel(threadid); -#endif - if (started) { - int pthread_join_retval = pthread_join(threadid,&status); - assert(pthread_join_retval == 0); - UNUSED(pthread_join_retval); - started = false; - } - running = false; - return 0; -} - -void *JThread::GetReturnValue() -{ - void *val; - - if (running) { - val = NULL; - } else { - val = retval; - } - - return val; -} - -bool JThread::IsSameThread() -{ - return pthread_equal(pthread_self(), threadid); -} - -void *JThread::TheThread(void *param) -{ - JThread *jthread = (JThread *)param; - - jthread->continuemutex2.Lock(); - jthread->running = true; - - jthread->continuemutex.Lock(); - jthread->continuemutex.Unlock(); - - jthread->Thread(); - - jthread->running = false; - - return NULL; -} - -void JThread::ThreadStarted() -{ - continuemutex2.Unlock(); -} - diff --git a/src/jthread/win32/jevent.cpp b/src/jthread/win32/jevent.cpp deleted file mode 100644 index 67b468f0..00000000 --- a/src/jthread/win32/jevent.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ -#include "jthread/jevent.h" - -Event::Event() { - hEvent = CreateEvent(NULL, 0, 0, NULL); -} - -Event::~Event() { - CloseHandle(hEvent); -} - -void Event::wait() { - WaitForSingleObject(hEvent, INFINITE); -} - -void Event::signal() { - SetEvent(hEvent); -} diff --git a/src/jthread/win32/jmutex.cpp b/src/jthread/win32/jmutex.cpp deleted file mode 100644 index b9f5e0e7..00000000 --- a/src/jthread/win32/jmutex.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ -#include -#include "jthread/jmutex.h" - -JMutex::JMutex() -{ -#ifdef JMUTEX_CRITICALSECTION - InitializeCriticalSection(&mutex); -#else - mutex = CreateMutex(NULL,FALSE,NULL); - assert(mutex != NULL); -#endif // JMUTEX_CRITICALSECTION -} - -JMutex::~JMutex() -{ -#ifdef JMUTEX_CRITICALSECTION - DeleteCriticalSection(&mutex); -#else - CloseHandle(mutex); -#endif // JMUTEX_CRITICALSECTION -} - -int JMutex::Lock() -{ -#ifdef JMUTEX_CRITICALSECTION - EnterCriticalSection(&mutex); -#else - WaitForSingleObject(mutex,INFINITE); -#endif // JMUTEX_CRITICALSECTION - return 0; -} - -int JMutex::Unlock() -{ -#ifdef JMUTEX_CRITICALSECTION - LeaveCriticalSection(&mutex); -#else - ReleaseMutex(mutex); -#endif // JMUTEX_CRITICALSECTION - return 0; -} - diff --git a/src/jthread/win32/jthread.cpp b/src/jthread/win32/jthread.cpp deleted file mode 100755 index b523d664..00000000 --- a/src/jthread/win32/jthread.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/* - - This file is a part of the JThread package, which contains some object- - oriented thread wrappers for different thread implementations. - - Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - -*/ - -#include "jthread/jthread.h" -#include -#define UNUSED(expr) do { (void)(expr); } while (0) -#ifndef _WIN32_WCE - #include -#endif // _WIN32_WCE - -JThread::JThread() -{ - retval = NULL; - requeststop = false; - running = false; -} - -JThread::~JThread() -{ - Kill(); -} - -void JThread::Wait() { - if (running) - { - WaitForSingleObject(threadhandle, INFINITE); - } -} - -int JThread::Start() -{ - if (running) - { - return ERR_JTHREAD_ALREADYRUNNING; - } - requeststop = false; - - continuemutex.Lock(); -#ifndef _WIN32_WCE - threadhandle = (HANDLE)_beginthreadex(NULL,0,TheThread,this,0,&threadid); -#else - threadhandle = CreateThread(NULL,0,TheThread,this,0,&threadid); -#endif // _WIN32_WCE - if (threadhandle == NULL) - { - continuemutex.Unlock(); - return ERR_JTHREAD_CANTSTARTTHREAD; - } - - /* Wait until 'running' is set */ - while (!running) - { - Sleep(1); - } - - continuemutex.Unlock(); - - continuemutex2.Lock(); - continuemutex2.Unlock(); - - return 0; -} - -int JThread::Kill() -{ - if (!running) - { - return ERR_JTHREAD_NOTRUNNING; - } - TerminateThread(threadhandle,0); - CloseHandle(threadhandle); - running = false; - return 0; -} - -void *JThread::GetReturnValue() -{ - void *val; - - if (running) { - val = NULL; - } else { - val = retval; - } - return val; -} - -bool JThread::IsSameThread() -{ - return GetCurrentThreadId() == threadid; -} - -#ifndef _WIN32_WCE -UINT __stdcall JThread::TheThread(void *param) -#else -DWORD WINAPI JThread::TheThread(void *param) -#endif // _WIN32_WCE -{ - JThread *jthread; - void *ret; - - jthread = (JThread *)param; - - jthread->continuemutex2.Lock(); - jthread->running = true; - - jthread->continuemutex.Lock(); - jthread->continuemutex.Unlock(); - - ret = jthread->Thread(); - - jthread->running = false; - jthread->retval = ret; - CloseHandle(jthread->threadhandle); - return 0; -} - -void JThread::ThreadStarted() -{ - continuemutex2.Unlock(); -} - diff --git a/src/keycode.cpp b/src/keycode.cpp index 0fe9f444..29ceae60 100644 --- a/src/keycode.cpp +++ b/src/keycode.cpp @@ -256,7 +256,11 @@ KeyPress::KeyPress() : KeyPress::KeyPress(const char *name) { - if (strlen(name) > 4) { + if (name[0] == 0) { + Key = irr::KEY_KEY_CODES_COUNT; + Char = L'\0'; + return; + } else if (strlen(name) > 4) { try { Key = keyname_to_keycode(name); m_name = name; diff --git a/src/localplayer.cpp b/src/localplayer.cpp index c800f205..11df696a 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -48,9 +48,10 @@ LocalPlayer::LocalPlayer(IGameDef *gamedef, const char *name): light_color(255,255,255,255), m_sneak_node(32767,32767,32767), m_sneak_node_exists(false), + m_need_to_get_new_sneak_node(true), + m_sneak_node_bb_ymax(0), m_old_node_below(32767,32767,32767), m_old_node_below_type("air"), - m_need_to_get_new_sneak_node(true), m_can_jump(false), m_cao(NULL) { @@ -179,25 +180,26 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, If sneaking, keep in range from the last walked node and don't fall off from it */ - if(control.sneak && m_sneak_node_exists && + if (control.sneak && m_sneak_node_exists && !(fly_allowed && g_settings->getBool("free_move")) && !in_liquid && - physics_override_sneak) - { - f32 maxd = 0.5*BS + sneak_max; + physics_override_sneak) { + f32 maxd = 0.5 * BS + sneak_max; v3f lwn_f = intToFloat(m_sneak_node, BS); position.X = rangelim(position.X, lwn_f.X-maxd, lwn_f.X+maxd); position.Z = rangelim(position.Z, lwn_f.Z-maxd, lwn_f.Z+maxd); - if(!is_climbing) - { - f32 min_y = lwn_f.Y + 0.5*BS; - if(position.Y < min_y) - { - position.Y = min_y; - - if(m_speed.Y < 0) - m_speed.Y = 0; - } + if (!is_climbing) { + // Move up if necessary + f32 new_y = (lwn_f.Y - 0.5 * BS) + m_sneak_node_bb_ymax; + if (position.Y < new_y) + position.Y = new_y; + /* + Collision seems broken, since player is sinking when + sneaking over the edges of current sneaking_node. + TODO (when fixed): Set Y-speed only to 0 when position.Y < new_y. + */ + if (m_speed.Y < 0) + m_speed.Y = 0; } } @@ -230,27 +232,28 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, player is sneaking from, if any. If the node from under the player has been removed, the player falls. */ - v3s16 current_node = floatToInt(position - v3f(0,BS/2,0), BS); - if(m_sneak_node_exists && - nodemgr->get(map->getNodeNoEx(m_old_node_below)).name == "air" && - m_old_node_below_type != "air") - { + f32 position_y_mod = 0.05 * BS; + if (m_sneak_node_bb_ymax > 0) + position_y_mod = m_sneak_node_bb_ymax - position_y_mod; + v3s16 current_node = floatToInt(position - v3f(0, position_y_mod, 0), BS); + if (m_sneak_node_exists && + nodemgr->get(map->getNodeNoEx(m_old_node_below)).name == "air" && + m_old_node_below_type != "air") { // Old node appears to have been removed; that is, // it wasn't air before but now it is m_need_to_get_new_sneak_node = false; m_sneak_node_exists = false; - } - else if(nodemgr->get(map->getNodeNoEx(current_node)).name != "air") - { + } else if (nodemgr->get(map->getNodeNoEx(current_node)).name != "air") { // We are on something, so make sure to recalculate the sneak // node. m_need_to_get_new_sneak_node = true; } - if(m_need_to_get_new_sneak_node && physics_override_sneak) - { - v3s16 pos_i_bottom = floatToInt(position - v3f(0,BS/2,0), BS); + + if (m_need_to_get_new_sneak_node && physics_override_sneak) { + m_sneak_node_bb_ymax = 0; + v3s16 pos_i_bottom = floatToInt(position - v3f(0, position_y_mod, 0), BS); v2f player_p2df(position.X, position.Z); - f32 min_distance_f = 100000.0*BS; + f32 min_distance_f = 100000.0 * BS; // If already seeking from some node, compare to it. /*if(m_sneak_node_exists) { @@ -298,11 +301,24 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, new_sneak_node = p; } - bool sneak_node_found = (min_distance_f < 100000.0*BS*0.9); + bool sneak_node_found = (min_distance_f < 100000.0 * BS * 0.9); m_sneak_node = new_sneak_node; m_sneak_node_exists = sneak_node_found; + if (sneak_node_found) { + f32 cb_max = 0; + MapNode n = map->getNodeNoEx(m_sneak_node); + std::vector nodeboxes = n.getCollisionBoxes(nodemgr); + for (std::vector::iterator it = nodeboxes.begin(); + it != nodeboxes.end(); ++it) { + aabb3f box = *it; + if (box.MaxEdge.Y > cb_max) + cb_max = box.MaxEdge.Y; + } + m_sneak_node_bb_ymax = cb_max; + } + /* If sneaking, the player's collision box can be in air, so this has to be set explicitly @@ -319,26 +335,16 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, /* Report collisions */ - bool bouncy_jump = false; + // Dont report if flying if(collision_info && !(g_settings->getBool("free_move") && fly_allowed)) { for(size_t i=0; ipush_back(info); - if(info.new_speed.Y - info.old_speed.Y > 0.1*BS && - info.bouncy) - bouncy_jump = true; } } - if(bouncy_jump && control.jump){ - m_speed.Y += movement_speed_jump*BS; - touching_ground = false; - MtEvent *e = new SimpleTriggerEvent("PlayerJump"); - m_gamedef->event()->put(e); - } - - if(!touching_ground_was && touching_ground){ + if(!result.standing_on_object && !touching_ground_was && touching_ground) { MtEvent *e = new SimpleTriggerEvent("PlayerRegainGround"); m_gamedef->event()->put(e); @@ -371,6 +377,19 @@ void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d, m_can_jump = touching_ground && !in_liquid; if(itemgroup_get(f.groups, "disable_jump")) m_can_jump = false; + // Jump key pressed while jumping off from a bouncy block + if (m_can_jump && control.jump && itemgroup_get(f.groups, "bouncy") && + m_speed.Y >= -0.5 * BS) { + float jumpspeed = movement_speed_jump * physics_override_jump; + if (m_speed.Y > 1) { + // Reduce boost when speed already is high + m_speed.Y += jumpspeed / (1 + (m_speed.Y / 16 )); + } else { + m_speed.Y += jumpspeed; + } + setSpeed(m_speed); + m_can_jump = false; + } } void LocalPlayer::move(f32 dtime, Environment *env, f32 pos_max_d) diff --git a/src/localplayer.h b/src/localplayer.h index 4d5d7a40..d510ef9e 100644 --- a/src/localplayer.h +++ b/src/localplayer.h @@ -85,12 +85,15 @@ private: v3s16 m_sneak_node; // Whether the player is allowed to sneak bool m_sneak_node_exists; + // Whether recalculation of the sneak node is needed + bool m_need_to_get_new_sneak_node; + // Stores the max player uplift by m_sneak_node and is updated + // when m_need_to_get_new_sneak_node == true + f32 m_sneak_node_bb_ymax; // Node below player, used to determine whether it has been removed, // and its old type v3s16 m_old_node_below; std::string m_old_node_below_type; - // Whether recalculation of the sneak node is needed - bool m_need_to_get_new_sneak_node; bool m_can_jump; GenericCAO* m_cao; diff --git a/src/log.cpp b/src/log.cpp index 262b998b..595101cb 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -19,19 +19,76 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" -#include -#include -#include -#include -#include "threads.h" -#include "jthread/jmutexautolock.h" +#include "threading/mutex_auto_lock.h" #include "debug.h" #include "gettime.h" #include "porting.h" #include "config.h" +#include "exceptions.h" +#include "util/numeric.h" +#include "log.h" + +#include +#include +#include +#include +#include + +class StringBuffer : public std::streambuf { +public: + StringBuffer() {} + + int overflow(int c); + virtual void flush(const std::string &buf) = 0; + std::streamsize xsputn(const char *s, std::streamsize n); + void push_back(char c); + +private: + std::string buffer; +}; + + +class LogBuffer : public StringBuffer { +public: + LogBuffer(Logger &logger, LogLevel lev) : + logger(logger), + level(lev) + {} + + void flush(const std::string &buffer); + +private: + Logger &logger; + LogLevel level; +}; + + +class RawLogBuffer : public StringBuffer { +public: + void flush(const std::string &buffer); +}; + +//// +//// Globals +//// + +Logger g_logger; + +StreamLogOutput stdout_output(std::cout); +StreamLogOutput stderr_output(std::cerr); +std::ostream null_stream(NULL); + +RawLogBuffer raw_buf; + +LogBuffer none_buf(g_logger, LL_NONE); +LogBuffer error_buf(g_logger, LL_ERROR); +LogBuffer warning_buf(g_logger, LL_WARNING); +LogBuffer action_buf(g_logger, LL_ACTION); +LogBuffer info_buf(g_logger, LL_INFO); +LogBuffer verbose_buf(g_logger, LL_VERBOSE); // Connection -std::ostream *dout_con_ptr = &dummyout; +std::ostream *dout_con_ptr = &null_stream; std::ostream *derr_con_ptr = &verbosestream; // Server @@ -44,170 +101,246 @@ std::ostream *dout_client_ptr = &infostream; std::ostream *derr_client_ptr = &errorstream; #endif +std::ostream rawstream(&raw_buf); +std::ostream dstream(&none_buf); +std::ostream errorstream(&error_buf); +std::ostream warningstream(&warning_buf); +std::ostream actionstream(&action_buf); +std::ostream infostream(&info_buf); +std::ostream verbosestream(&verbose_buf); + +// Android #ifdef __ANDROID__ -unsigned int android_log_level_mapping[] = { - /* LMT_ERROR */ ANDROID_LOG_ERROR, - /* LMT_ACTION */ ANDROID_LOG_WARN, - /* LMT_INFO */ ANDROID_LOG_INFO, - /* LMT_VERBOSE */ ANDROID_LOG_VERBOSE - }; -#endif -std::vector log_outputs[LMT_NUM_VALUES]; -std::map log_threadnames; -JMutex log_threadnamemutex; - -void log_add_output(ILogOutput *out, enum LogMessageLevel lev) -{ - log_outputs[lev].push_back(out); -} - -void log_add_output_maxlev(ILogOutput *out, enum LogMessageLevel lev) -{ - for(int i=0; i<=lev; i++) - log_outputs[i].push_back(out); -} - -void log_add_output_all_levs(ILogOutput *out) -{ - for(int i=0; i::iterator it = - std::find(log_outputs[i].begin(), log_outputs[i].end(), out); - if(it != log_outputs[i].end()) - log_outputs[i].erase(it); - } -} - -void log_set_lev_silence(enum LogMessageLevel lev, bool silence) -{ - JMutexAutoLock lock(log_threadnamemutex); - - for (std::vector::iterator it = log_outputs[lev].begin(); - it != log_outputs[lev].end(); ++it) { - ILogOutput *out = *it; - out->silence = silence; - } -} - -void log_register_thread(const std::string &name) -{ - threadid_t id = get_current_thread_id(); - JMutexAutoLock lock(log_threadnamemutex); - - log_threadnames[id] = name; -} - -void log_deregister_thread() -{ - threadid_t id = get_current_thread_id(); - JMutexAutoLock lock(log_threadnamemutex); - - log_threadnames.erase(id); -} - -static std::string get_lev_string(enum LogMessageLevel lev) -{ - switch(lev){ - case LMT_ERROR: - return "ERROR"; - case LMT_ACTION: - return "ACTION"; - case LMT_INFO: - return "INFO"; - case LMT_VERBOSE: - return "VERBOSE"; - case LMT_NUM_VALUES: - break; - } - return "(unknown level)"; -} - -void log_printline(enum LogMessageLevel lev, const std::string &text) -{ - JMutexAutoLock lock(log_threadnamemutex); - std::string threadname = "(unknown thread)"; - std::map::const_iterator i; - i = log_threadnames.find(get_current_thread_id()); - if(i != log_threadnames.end()) - threadname = i->second; - std::string levelname = get_lev_string(lev); - std::ostringstream os(std::ios_base::binary); - os << getTimestamp() << ": " << levelname << "["<::iterator i = log_outputs[lev].begin(); - i != log_outputs[lev].end(); i++) { - ILogOutput *out = *i; - if (out->silence) - continue; - - out->printLog(os.str()); - out->printLog(os.str(), lev); - out->printLog(lev, text); - } -} - -class Logbuf : public std::streambuf -{ -public: - Logbuf(enum LogMessageLevel lev): - m_lev(lev) - { - } - - ~Logbuf() - { - } - - int overflow(int c) - { - bufchar(c); - return c; - } - std::streamsize xsputn(const char *s, std::streamsize n) - { - for(int i=0; i::iterator it; + + it = std::find(m_outputs[i].begin(), m_outputs[i].end(), out); + if (it != m_outputs[i].end()) + m_outputs[i].erase(it); + } +} + +void Logger::setLevelSilenced(LogLevel lev, bool silenced) +{ + m_silenced_levels[lev] = silenced; +} + +void Logger::registerThread(const std::string &name) +{ + threadid_t id = thr_get_current_thread_id(); + MutexAutoLock lock(m_mutex); + m_thread_names[id] = name; +} + +void Logger::deregisterThread() +{ + threadid_t id = thr_get_current_thread_id(); + MutexAutoLock lock(m_mutex); + m_thread_names.erase(id); +} + +const std::string Logger::getLevelLabel(LogLevel lev) +{ + static const std::string names[] = { + "", + "ERROR", + "WARNING", + "ACTION", + "INFO", + "VERBOSE", + }; + assert(lev < LL_MAX && lev >= 0); + STATIC_ASSERT(ARRLEN(names) == LL_MAX, + mismatch_between_loglevel_names_and_enum); + return names[lev]; +} + +const std::string Logger::getThreadName() +{ + std::map::const_iterator it; + + threadid_t id = thr_get_current_thread_id(); + it = m_thread_names.find(id); + if (it != m_thread_names.end()) + return it->second; + + std::ostringstream os; + os << "#0x" << std::hex << id; + return os.str(); +} + +void Logger::log(LogLevel lev, const std::string &text) +{ + if (m_silenced_levels[lev]) + return; + + const std::string thread_name = getThreadName(); + const std::string label = getLevelLabel(lev); + const std::string timestamp = getTimestamp(); + std::ostringstream os(std::ios_base::binary); + os << timestamp << ": " << label << "[" << thread_name << "]: " << text; + + logToOutputs(lev, os.str(), timestamp, thread_name, text); +} + +void Logger::logRaw(LogLevel lev, const std::string &text) +{ + if (m_silenced_levels[lev]) + return; + + logToOutputsRaw(lev, text); +} + +void Logger::logToOutputsRaw(LogLevel lev, const std::string &line) +{ + MutexAutoLock lock(m_mutex); + for (size_t i = 0; i != m_outputs[lev].size(); i++) + m_outputs[lev][i]->logRaw(lev, line); +} + +void Logger::logToOutputs(LogLevel lev, const std::string &combined, + const std::string &time, const std::string &thread_name, + const std::string &payload_text) +{ + MutexAutoLock lock(m_mutex); + for (size_t i = 0; i != m_outputs[lev].size(); i++) + m_outputs[lev][i]->log(lev, combined, time, thread_name, payload_text); +} + + +//// +//// *LogOutput methods +//// + +void FileLogOutput::open(const std::string &filename) +{ + m_stream.open(filename.c_str(), std::ios::app | std::ios::ate); + if (!m_stream.good()) + throw FileNotGoodException("Failed to open log file " + + filename + ": " + strerror(errno)); + m_stream << "\n\n" + "-------------" << std::endl + << " Separator" << std::endl + << "-------------\n" << std::endl; +} + + + +//// +//// *Buffer methods +//// + +int StringBuffer::overflow(int c) +{ + push_back(c); + return c; +} + + +std::streamsize StringBuffer::xsputn(const char *s, std::streamsize n) +{ + for (int i = 0; i < n; ++i) + push_back(s[i]); + return n; +} + +void StringBuffer::push_back(char c) +{ + if (c == '\n' || c == '\r') { + if (!buffer.empty()) + flush(buffer); + buffer.clear(); + } else { + buffer.push_back(c); + } +} + + +void LogBuffer::flush(const std::string &buffer) +{ + logger.log(level, buffer); +} + +void RawLogBuffer::flush(const std::string &buffer) +{ + g_logger.logRaw(LL_NONE, buffer); +} diff --git a/src/log.h b/src/log.h index 83cd0c8d..e7cea9b5 100644 --- a/src/log.h +++ b/src/log.h @@ -20,83 +20,192 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef LOG_HEADER #define LOG_HEADER +#include +#include #include +#include +#include "threads.h" -/* - Use this for logging everything. +class ILogOutput; - If you need to explicitly print something, use dstream or cout or cerr. -*/ - -enum LogMessageLevel { - LMT_ERROR, /* Something failed ("invalid map data on disk, block (2,2,1)") */ - LMT_ACTION, /* In-game actions ("celeron55 placed block at (12,4,-5)") */ - LMT_INFO, /* More deep info ("saving map on disk (only_modified=true)") */ - LMT_VERBOSE, /* Flood-style ("loaded block (2,2,2) from disk") */ - LMT_NUM_VALUES, +enum LogLevel { + LL_NONE, // Special level that is always printed + LL_ERROR, + LL_WARNING, + LL_ACTION, // In-game actions + LL_INFO, + LL_VERBOSE, + LL_MAX, }; -class ILogOutput -{ +class Logger { public: - ILogOutput() : - silence(false) - {} + void addOutput(ILogOutput *out); + void addOutput(ILogOutput *out, LogLevel lev); + void addOutputMaxLevel(ILogOutput *out, LogLevel lev); + void removeOutput(ILogOutput *out); + void setLevelSilenced(LogLevel lev, bool silenced); - /* line: Full line with timestamp, level and thread */ - virtual void printLog(const std::string &line){}; - /* line: Full line with timestamp, level and thread */ - virtual void printLog(const std::string &line, enum LogMessageLevel lev){}; - /* line: Only actual printed text */ - virtual void printLog(enum LogMessageLevel lev, const std::string &line){}; + void registerThread(const std::string &name); + void deregisterThread(); - bool silence; + void log(LogLevel lev, const std::string &text); + // Logs without a prefix + void logRaw(LogLevel lev, const std::string &text); + + void setTraceEnabled(bool enable) { m_trace_enabled = enable; } + bool getTraceEnabled() { return m_trace_enabled; } + + static LogLevel stringToLevel(const std::string &name); + static const std::string getLevelLabel(LogLevel lev); + +private: + void logToOutputsRaw(LogLevel, const std::string &line); + void logToOutputs(LogLevel, const std::string &combined, + const std::string &time, const std::string &thread_name, + const std::string &payload_text); + + const std::string getThreadName(); + + std::vector m_outputs[LL_MAX]; + + // Should implement atomic loads and stores (even though it's only + // written to when one thread has access currently). + // Works on all known architectures (x86, ARM, MIPS). + volatile bool m_silenced_levels[LL_MAX]; + std::map m_thread_names; + mutable Mutex m_mutex; + bool m_trace_enabled; }; -void log_add_output(ILogOutput *out, enum LogMessageLevel lev); -void log_add_output_maxlev(ILogOutput *out, enum LogMessageLevel lev); -void log_add_output_all_levs(ILogOutput *out); -void log_remove_output(ILogOutput *out); -void log_set_lev_silence(enum LogMessageLevel lev, bool silence); +class ILogOutput { +public: + virtual void logRaw(LogLevel, const std::string &line) = 0; + virtual void log(LogLevel, const std::string &combined, + const std::string &time, const std::string &thread_name, + const std::string &payload_text) = 0; +}; -void log_register_thread(const std::string &name); -void log_deregister_thread(); +class ICombinedLogOutput : public ILogOutput { +public: + void log(LogLevel lev, const std::string &combined, + const std::string &time, const std::string &thread_name, + const std::string &payload_text) + { + logRaw(lev, combined); + } +}; -void log_printline(enum LogMessageLevel lev, const std::string &text); +class StreamLogOutput : public ICombinedLogOutput { +public: + StreamLogOutput(std::ostream &stream) : + m_stream(stream) + { + } -#define LOGLINEF(lev, ...)\ -{\ - char buf[10000];\ - snprintf(buf, 10000, __VA_ARGS__);\ - log_printline(lev, buf);\ -} + void logRaw(LogLevel lev, const std::string &line) + { + m_stream << line << std::endl; + } -extern std::ostream errorstream; -extern std::ostream actionstream; -extern std::ostream infostream; -extern std::ostream verbosestream; +private: + std::ostream &m_stream; +}; -extern bool log_trace_level_enabled; +class FileLogOutput : public ICombinedLogOutput { +public: + void open(const std::string &filename); -#define TRACESTREAM(x){ if(log_trace_level_enabled) verbosestream x; } -#define TRACEDO(x){ if(log_trace_level_enabled){ x ;} } + void logRaw(LogLevel lev, const std::string &line) + { + m_stream << line << std::endl; + } + +private: + std::ofstream m_stream; +}; + +class LogOutputBuffer : public ICombinedLogOutput { +public: + LogOutputBuffer(Logger &logger, LogLevel lev) : + m_logger(logger) + { + m_logger.addOutput(this, lev); + } + + ~LogOutputBuffer() + { + m_logger.removeOutput(this); + } + + void logRaw(LogLevel lev, const std::string &line) + { + m_buffer.push(line); + } + + bool empty() + { + return m_buffer.empty(); + } + + std::string get() + { + if (empty()) + return ""; + std::string s = m_buffer.front(); + m_buffer.pop(); + return s; + } + +private: + std::queue m_buffer; + Logger &m_logger; +}; + + +extern StreamLogOutput stdout_output; +extern StreamLogOutput stderr_output; +extern std::ostream null_stream; extern std::ostream *dout_con_ptr; extern std::ostream *derr_con_ptr; extern std::ostream *dout_server_ptr; extern std::ostream *derr_server_ptr; + +#ifndef SERVER +extern std::ostream *dout_client_ptr; +extern std::ostream *derr_client_ptr; +#endif + +extern Logger g_logger; + +// Writes directly to all LL_NONE log outputs for g_logger with no prefix. +extern std::ostream rawstream; + +extern std::ostream errorstream; +extern std::ostream warningstream; +extern std::ostream actionstream; +extern std::ostream infostream; +extern std::ostream verbosestream; +extern std::ostream dstream; + +#define TRACEDO(x) do { \ + if (g_logger.getTraceEnabled()) { \ + x; \ + } \ +} while (0) + +#define TRACESTREAM(x) TRACEDO(verbosestream x) + #define dout_con (*dout_con_ptr) #define derr_con (*derr_con_ptr) #define dout_server (*dout_server_ptr) #define derr_server (*derr_server_ptr) #ifndef SERVER -extern std::ostream *dout_client_ptr; -extern std::ostream *derr_client_ptr; -#define dout_client (*dout_client_ptr) -#define derr_client (*derr_client_ptr) - + #define dout_client (*dout_client_ptr) + #define derr_client (*derr_client_ptr) #endif -#endif +#endif diff --git a/src/main.cpp b/src/main.cpp index 74963e39..aaeb5842 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -40,7 +40,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "game.h" #include "defaultsettings.h" #include "gettext.h" -#include "profiler.h" #include "log.h" #include "quicktune.h" #include "httpfetch.h" @@ -81,10 +80,10 @@ static void list_game_ids(); static void list_worlds(); static void setup_log_params(const Settings &cmd_args); static bool create_userdata_path(); -static bool init_common(int *log_level, const Settings &cmd_args, int argc, char *argv[]); +static bool init_common(const Settings &cmd_args, int argc, char *argv[]); static void startup_message(); static bool read_config_file(const Settings &cmd_args); -static void init_debug_streams(int *log_level, const Settings &cmd_args); +static void init_log_streams(const Settings &cmd_args); static bool game_configure(GameParams *game_params, const Settings &cmd_args); static void game_configure_port(GameParams *game_params, const Settings &cmd_args); @@ -123,25 +122,7 @@ u32 getTime(TimePrecision prec) #endif -class StderrLogOutput: public ILogOutput -{ -public: - /* line: Full line with timestamp, level and thread */ - void printLog(const std::string &line) - { - std::cerr << line << std::endl; - } -} main_stderr_log_out; - -class DstreamNoStderrLogOutput: public ILogOutput -{ -public: - /* line: Full line with timestamp, level and thread */ - void printLog(const std::string &line) - { - dstream_no_stderr << line << std::endl; - } -} main_dstream_no_stderr_log_out; +FileLogOutput file_log_output; static OptionList allowed_options; @@ -151,10 +132,8 @@ int main(int argc, char *argv[]) debug_set_exception_handler(); - log_add_output_maxlev(&main_stderr_log_out, LMT_ACTION); - log_add_output_all_levs(&main_dstream_no_stderr_log_out); - - log_register_thread("main"); + g_logger.registerThread("Main"); + g_logger.addOutputMaxLevel(&stderr_output, LL_ACTION); Settings cmd_args; bool cmd_args_ok = get_cmdline_opts(argc, argv, &cmd_args); @@ -181,8 +160,7 @@ int main(int argc, char *argv[]) } // Initialize debug stacks - debug_stacks_init(); - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // Debug handler BEGIN_DEBUG_EXCEPTION_HANDLER @@ -199,18 +177,17 @@ int main(int argc, char *argv[]) return 0; } - GameParams game_params; - if (!init_common(&game_params.log_level, cmd_args, argc, argv)) + if (!init_common(cmd_args, argc, argv)) return 1; #ifndef __ANDROID__ // Run unit tests if (cmd_args.getFlag("run-unittests")) { - run_tests(); - return 0; + return run_tests(); } #endif + GameParams game_params; #ifdef SERVER game_params.is_dedicated_server = true; #else @@ -220,7 +197,7 @@ int main(int argc, char *argv[]) if (!game_configure(&game_params, cmd_args)) return 1; - sanity_check(game_params.world_path != ""); + sanity_check(!game_params.world_path.empty()); infostream << "Using commanded world path [" << game_params.world_path << "]" << std::endl; @@ -248,7 +225,7 @@ int main(int argc, char *argv[]) // Stop httpfetch thread (if started) httpfetch_cleanup(); - END_DEBUG_EXCEPTION_HANDLER(errorstream) + END_DEBUG_EXCEPTION_HANDLER return retval; } @@ -358,7 +335,7 @@ static void list_game_ids() { std::set gameids = getAvailableGameIds(); for (std::set::const_iterator i = gameids.begin(); - i != gameids.end(); i++) + i != gameids.end(); ++i) dstream << (*i) <getS32("curl_parallel_limit")); -#ifdef _MSC_VER - init_gettext((porting::path_share + DIR_DELIM + "locale").c_str(), + init_gettext(porting::path_locale.c_str(), g_settings->get("language"), argc, argv); -#else - init_gettext((porting::path_share + DIR_DELIM + "locale").c_str(), - g_settings->get("language")); -#endif return true; } @@ -534,38 +506,47 @@ static bool read_config_file(const Settings &cmd_args) return true; } -static void init_debug_streams(int *log_level, const Settings &cmd_args) +static void init_log_streams(const Settings &cmd_args) { #if RUN_IN_PLACE - std::string logfile = DEBUGFILE; + std::string log_filename = DEBUGFILE; #else - std::string logfile = porting::path_user + DIR_DELIM + DEBUGFILE; + std::string log_filename = porting::path_user + DIR_DELIM + DEBUGFILE; #endif if (cmd_args.exists("logfile")) - logfile = cmd_args.get("logfile"); + log_filename = cmd_args.get("logfile"); - log_remove_output(&main_dstream_no_stderr_log_out); - *log_level = g_settings->getS32("debug_log_level"); + g_logger.removeOutput(&file_log_output); + std::string conf_loglev = g_settings->get("debug_log_level"); - if (*log_level == 0) //no logging - logfile = ""; - if (*log_level < 0) { - dstream << "WARNING: Supplied debug_log_level < 0; Using 0" << std::endl; - *log_level = 0; - } else if (*log_level > LMT_NUM_VALUES) { - dstream << "WARNING: Supplied debug_log_level > " << LMT_NUM_VALUES - << "; Using " << LMT_NUM_VALUES << std::endl; - *log_level = LMT_NUM_VALUES; + // Old integer format + if (std::isdigit(conf_loglev[0])) { + warningstream << "Deprecated use of debug_log_level with an " + "integer value; please update your configuration." << std::endl; + static const char *lev_name[] = + {"", "error", "action", "info", "verbose"}; + int lev_i = atoi(conf_loglev.c_str()); + if (lev_i < 0 || lev_i >= (int)ARRLEN(lev_name)) { + warningstream << "Supplied invalid debug_log_level!" + " Assuming action level." << std::endl; + lev_i = 2; + } + conf_loglev = lev_name[lev_i]; } - log_add_output_maxlev(&main_dstream_no_stderr_log_out, - (LogMessageLevel)(*log_level - 1)); + if (log_filename.empty() || conf_loglev.empty()) // No logging + return; - debugstreams_init(false, logfile == "" ? NULL : logfile.c_str()); + LogLevel log_level = Logger::stringToLevel(conf_loglev); + if (log_level == LL_MAX) { + warningstream << "Supplied unrecognized debug_log_level; " + "using maximum." << std::endl; + } - infostream << "logfile = " << logfile << std::endl; + verbosestream << "log_filename = " << log_filename << std::endl; - atexit(debugstreams_deinit); + file_log_output.open(log_filename.c_str()); + g_logger.addOutputMaxLevel(&file_log_output, log_level); } static bool game_configure(GameParams *game_params, const Settings &cmd_args) @@ -679,10 +660,10 @@ static bool auto_select_world(GameParams *game_params) << world_path << "]" << std::endl; // If there are multiple worlds, list them } else if (worldspecs.size() > 1 && game_params->is_dedicated_server) { - dstream << _("Multiple worlds are available.") << std::endl; - dstream << _("Please select one using --worldname " + std::cerr << _("Multiple worlds are available.") << std::endl; + std::cerr << _("Please select one using --worldname " " or --world ") << std::endl; - print_worldspecs(worldspecs, dstream); + print_worldspecs(worldspecs, std::cerr); return false; // If there are no worlds, automatically create a new one } else { @@ -783,7 +764,7 @@ static bool determine_subgame(GameParams *game_params) if (game_params->game_spec.isValid()) { gamespec = game_params->game_spec; if (game_params->game_spec.id != world_gameid) { - errorstream << "WARNING: Using commanded gameid [" + warningstream << "Using commanded gameid [" << gamespec.id << "]" << " instead of world gameid [" << world_gameid << "]" << std::endl; } @@ -843,15 +824,22 @@ static bool run_dedicated_server(const GameParams &game_params, const Settings & if (cmd_args.exists("migrate")) return migrate_database(game_params, cmd_args); - // Create server - Server server(game_params.world_path, - game_params.game_spec, false, bind_addr.isIPv6()); + try { + // Create server + Server server(game_params.world_path, game_params.game_spec, false, + bind_addr.isIPv6()); + server.start(bind_addr); - server.start(bind_addr); - - // Run server - bool &kill = *porting::signal_handler_killstatus(); - dedicated_server_loop(server, kill); + // Run server + bool &kill = *porting::signal_handler_killstatus(); + dedicated_server_loop(server, kill); + } catch (const ModError &e) { + errorstream << "ModError: " << e.what() << std::endl; + return false; + } catch (const ServerError &e) { + errorstream << "ServerError: " << e.what() << std::endl; + return false; + } return true; } diff --git a/src/map.cpp b/src/map.cpp index 613fe233..e747d84d 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -43,6 +43,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "database-dummy.h" #include "database-sqlite3.h" #include +#include #if USE_LEVELDB #include "database-leveldb.h" #endif @@ -672,7 +673,7 @@ void Map::updateLighting(enum LightBank bank, { INodeDefManager *nodemgr = m_gamedef->ndef(); - /*m_dout<ndef(); /*PrintInfo(m_dout); - m_dout< ybottom="< ybottom="<= ybottom; y--) { v3s16 p2(p.X, y, p.Z); - /*m_dout<getUsageTimer() < b.block->getUsageTimer(); + }; +}; + /* Updates usage timers */ -void Map::timerUpdate(float dtime, float unload_timeout, +void Map::timerUpdate(float dtime, float unload_timeout, u32 max_loaded_blocks, std::vector *unloaded_blocks) { bool save_before_unloading = (mapType() == MAPTYPE_SERVER); @@ -1416,48 +1432,108 @@ void Map::timerUpdate(float dtime, float unload_timeout, u32 block_count_all = 0; beginSave(); - for(std::map::iterator si = m_sectors.begin(); - si != m_sectors.end(); ++si) { - MapSector *sector = si->second; - bool all_blocks_deleted = true; + // If there is no practical limit, we spare creation of mapblock_queue + if (max_loaded_blocks == U32_MAX) { + for (std::map::iterator si = m_sectors.begin(); + si != m_sectors.end(); ++si) { + MapSector *sector = si->second; - MapBlockVect blocks; - sector->getBlocks(blocks); + bool all_blocks_deleted = true; - for(MapBlockVect::iterator i = blocks.begin(); - i != blocks.end(); ++i) { - MapBlock *block = (*i); + MapBlockVect blocks; + sector->getBlocks(blocks); - block->incrementUsageTimer(dtime); + for (MapBlockVect::iterator i = blocks.begin(); + i != blocks.end(); ++i) { + MapBlock *block = (*i); - if(block->refGet() == 0 && block->getUsageTimer() > unload_timeout) { - v3s16 p = block->getPos(); + block->incrementUsageTimer(dtime); - // Save if modified - if (block->getModified() != MOD_STATE_CLEAN && save_before_unloading) { - modprofiler.add(block->getModifiedReasonString(), 1); - if (!saveBlock(block)) - continue; - saved_blocks_count++; + if (block->refGet() == 0 + && block->getUsageTimer() > unload_timeout) { + v3s16 p = block->getPos(); + + // Save if modified + if (block->getModified() != MOD_STATE_CLEAN + && save_before_unloading) { + modprofiler.add(block->getModifiedReasonString(), 1); + if (!saveBlock(block)) + continue; + saved_blocks_count++; + } + + // Delete from memory + sector->deleteBlock(block); + + if (unloaded_blocks) + unloaded_blocks->push_back(p); + + deleted_blocks_count++; + } else { + all_blocks_deleted = false; + block_count_all++; } - - // Delete from memory - sector->deleteBlock(block); - - if(unloaded_blocks) - unloaded_blocks->push_back(p); - - deleted_blocks_count++; } - else { - all_blocks_deleted = false; - block_count_all++; + + if (all_blocks_deleted) { + sector_deletion_queue.push_back(si->first); } } + } else { + std::priority_queue mapblock_queue; + for (std::map::iterator si = m_sectors.begin(); + si != m_sectors.end(); ++si) { + MapSector *sector = si->second; - if(all_blocks_deleted) { - sector_deletion_queue.push_back(si->first); + MapBlockVect blocks; + sector->getBlocks(blocks); + + for(MapBlockVect::iterator i = blocks.begin(); + i != blocks.end(); ++i) { + MapBlock *block = (*i); + + block->incrementUsageTimer(dtime); + mapblock_queue.push(TimeOrderedMapBlock(sector, block)); + } + } + block_count_all = mapblock_queue.size(); + // Delete old blocks, and blocks over the limit from the memory + while (!mapblock_queue.empty() && (mapblock_queue.size() > max_loaded_blocks + || mapblock_queue.top().block->getUsageTimer() > unload_timeout)) { + TimeOrderedMapBlock b = mapblock_queue.top(); + mapblock_queue.pop(); + + MapBlock *block = b.block; + + if (block->refGet() != 0) + continue; + + v3s16 p = block->getPos(); + + // Save if modified + if (block->getModified() != MOD_STATE_CLEAN && save_before_unloading) { + modprofiler.add(block->getModifiedReasonString(), 1); + if (!saveBlock(block)) + continue; + saved_blocks_count++; + } + + // Delete from memory + b.sect->deleteBlock(block); + + if (unloaded_blocks) + unloaded_blocks->push_back(p); + + deleted_blocks_count++; + block_count_all--; + } + // Delete empty sectors + for (std::map::iterator si = m_sectors.begin(); + si != m_sectors.end(); ++si) { + if (si->second->empty()) { + sector_deletion_queue.push_back(si->first); + } } } endSave(); @@ -1484,7 +1560,7 @@ void Map::timerUpdate(float dtime, float unload_timeout, void Map::unloadUnreferencedBlocks(std::vector *unloaded_blocks) { - timerUpdate(0.0, -1.0, unloaded_blocks); + timerUpdate(0.0, -1.0, 0, unloaded_blocks); } void Map::deleteSectors(std::vector §orList) @@ -1543,7 +1619,7 @@ void Map::transformLiquids(std::map & modified_blocks) INodeDefManager *nodemgr = m_gamedef->ndef(); - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); //TimeTaker timer("transformLiquids()"); u32 loopcount = 0; @@ -1942,7 +2018,7 @@ NodeMetadata *Map::getNodeMetadata(v3s16 p) block = emergeBlock(blockpos, false); } if(!block){ - infostream<<"WARNING: Map::getNodeMetadata(): Block not found" + warningstream<<"Map::getNodeMetadata(): Block not found" <params.water_level; } -bool ServerMap::initBlockMake(BlockMakeData *data, v3s16 blockpos) +bool ServerMap::initBlockMake(v3s16 blockpos, BlockMakeData *data) { - bool enable_mapgen_debug_info = m_emerge->mapgen_debug_info; - EMERGE_DBG_OUT("initBlockMake(): " PP(blockpos) " - " PP(blockpos)); + s16 csize = m_emerge->params.chunksize; + v3s16 bpmin = EmergeManager::getContainingChunk(blockpos, csize); + v3s16 bpmax = bpmin + v3s16(1, 1, 1) * (csize - 1); - s16 chunksize = m_emerge->params.chunksize; - s16 coffset = -chunksize / 2; - v3s16 chunk_offset(coffset, coffset, coffset); - v3s16 blockpos_div = getContainerPos(blockpos - chunk_offset, chunksize); - v3s16 blockpos_min = blockpos_div * chunksize; - v3s16 blockpos_max = blockpos_div * chunksize + v3s16(1,1,1)*(chunksize-1); - blockpos_min += chunk_offset; - blockpos_max += chunk_offset; + bool enable_mapgen_debug_info = m_emerge->enable_mapgen_debug_info; + EMERGE_DBG_OUT("initBlockMake(): " PP(bpmin) " - " PP(bpmax)); - v3s16 extra_borders(1,1,1); + v3s16 extra_borders(1, 1, 1); + v3s16 full_bpmin = bpmin - extra_borders; + v3s16 full_bpmax = bpmax + extra_borders; // Do nothing if not inside limits (+-1 because of neighbors) - if(blockpos_over_limit(blockpos_min - extra_borders) || - blockpos_over_limit(blockpos_max + extra_borders)) + if (blockpos_over_limit(full_bpmin) || + blockpos_over_limit(full_bpmax)) return false; data->seed = m_emerge->params.seed; - data->blockpos_min = blockpos_min; - data->blockpos_max = blockpos_max; + data->blockpos_min = bpmin; + data->blockpos_max = bpmax; data->blockpos_requested = blockpos; data->nodedef = m_gamedef->ndef(); /* Create the whole area of this and the neighboring blocks */ - { - //TimeTaker timer("initBlockMake() create area"); + for (s16 x = full_bpmin.X; x <= full_bpmax.X; x++) + for (s16 z = full_bpmin.Z; z <= full_bpmax.Z; z++) { + v2s16 sectorpos(x, z); + // Sector metadata is loaded from disk if not already loaded. + ServerMapSector *sector = createSector(sectorpos); + FATAL_ERROR_IF(sector == NULL, "createSector() failed"); - for(s16 x=blockpos_min.X-extra_borders.X; - x<=blockpos_max.X+extra_borders.X; x++) - for(s16 z=blockpos_min.Z-extra_borders.Z; - z<=blockpos_max.Z+extra_borders.Z; z++) - { - v2s16 sectorpos(x, z); - // Sector metadata is loaded from disk if not already loaded. - ServerMapSector *sector = createSector(sectorpos); - FATAL_ERROR_IF(sector == NULL, "createSector() failed"); - (void) sector; + for (s16 y = full_bpmin.Y; y <= full_bpmax.Y; y++) { + v3s16 p(x, y, z); - for(s16 y=blockpos_min.Y-extra_borders.Y; - y<=blockpos_max.Y+extra_borders.Y; y++) - { - v3s16 p(x,y,z); - //MapBlock *block = createBlock(p); - // 1) get from memory, 2) load from disk - MapBlock *block = emergeBlock(p, false); - // 3) create a blank one - if(block == NULL) - { - block = createBlock(p); + MapBlock *block = emergeBlock(p, false); + if (block == NULL) { + block = createBlock(p); - /* - Block gets sunlight if this is true. - - Refer to the map generator heuristics. - */ - bool ug = m_emerge->isBlockUnderground(p); - block->setIsUnderground(ug); - } - - // Lighting will not be valid after make_chunk is called - block->setLightingExpired(true); - // Lighting will be calculated - //block->setLightingExpired(false); + // Block gets sunlight if this is true. + // Refer to the map generator heuristics. + bool ug = m_emerge->isBlockUnderground(p); + block->setIsUnderground(ug); } } } @@ -2258,21 +2310,14 @@ bool ServerMap::initBlockMake(BlockMakeData *data, v3s16 blockpos) neighboring blocks */ - // The area that contains this block and it's neighbors - v3s16 bigarea_blocks_min = blockpos_min - extra_borders; - v3s16 bigarea_blocks_max = blockpos_max + extra_borders; - data->vmanip = new MMVManip(this); - //data->vmanip->setMap(this); + data->vmanip->initialEmerge(full_bpmin, full_bpmax); - // Add the area - { - //TimeTaker timer("initBlockMake() initialEmerge"); - data->vmanip->initialEmerge(bigarea_blocks_min, bigarea_blocks_max); - } - - // Ensure none of the blocks to be generated were marked as containing CONTENT_IGNORE -/* for (s16 z = blockpos_min.Z; z <= blockpos_max.Z; z++) { + // Note: we may need this again at some point. +#if 0 + // Ensure none of the blocks to be generated were marked as + // containing CONTENT_IGNORE + for (s16 z = blockpos_min.Z; z <= blockpos_max.Z; z++) { for (s16 y = blockpos_min.Y; y <= blockpos_max.Y; y++) { for (s16 x = blockpos_min.X; x <= blockpos_max.X; x++) { core::map::Node *n; @@ -2284,124 +2329,62 @@ bool ServerMap::initBlockMake(BlockMakeData *data, v3s16 blockpos) n->setValue(flags); } } - }*/ + } +#endif // Data is ready now. return true; } void ServerMap::finishBlockMake(BlockMakeData *data, - std::map &changed_blocks) + std::map *changed_blocks) { - v3s16 blockpos_min = data->blockpos_min; - v3s16 blockpos_max = data->blockpos_max; - v3s16 blockpos_requested = data->blockpos_requested; - /*infostream<<"finishBlockMake(): ("<blockpos_min; + v3s16 bpmax = data->blockpos_max; - v3s16 extra_borders(1,1,1); + v3s16 extra_borders(1, 1, 1); + v3s16 full_bpmin = bpmin - extra_borders; + v3s16 full_bpmax = bpmax + extra_borders; - bool enable_mapgen_debug_info = m_emerge->mapgen_debug_info; + bool enable_mapgen_debug_info = m_emerge->enable_mapgen_debug_info; + EMERGE_DBG_OUT("finishBlockMake(): " PP(bpmin) " - " PP(bpmax)); - /*infostream<<"Resulting vmanip:"<vmanip.print(infostream);*/ + /* + Set lighting to non-expired state in all of them. + This is cheating, but it is not fast enough if all of them + would actually be updated. + */ + for (s16 x = full_bpmin.X; x <= full_bpmax.X; x++) + for (s16 z = full_bpmin.Z; z <= full_bpmax.Z; z++) + for (s16 y = full_bpmin.Y; y <= full_bpmax.Y; y++) { + MapBlock *block = emergeBlock(v3s16(x, y, z), false); + if (!block) + continue; - // Make sure affected blocks are loaded - for(s16 x=blockpos_min.X-extra_borders.X; - x<=blockpos_max.X+extra_borders.X; x++) - for(s16 z=blockpos_min.Z-extra_borders.Z; - z<=blockpos_max.Z+extra_borders.Z; z++) - for(s16 y=blockpos_min.Y-extra_borders.Y; - y<=blockpos_max.Y+extra_borders.Y; y++) - { - v3s16 p(x, y, z); - // Load from disk if not already in memory - emergeBlock(p, false); + block->setLightingExpired(false); } /* Blit generated stuff to map NOTE: blitBackAll adds nearly everything to changed_blocks */ - { - // 70ms @cs=8 - //TimeTaker timer("finishBlockMake() blitBackAll"); - data->vmanip->blitBackAll(&changed_blocks); - } + data->vmanip->blitBackAll(changed_blocks); - EMERGE_DBG_OUT("finishBlockMake: changed_blocks.size()=" << changed_blocks.size()); + EMERGE_DBG_OUT("finishBlockMake: changed_blocks.size()=" + << changed_blocks->size()); /* Copy transforming liquid information */ - while(data->transforming_liquid.size() > 0) - { + while (data->transforming_liquid.size()) { m_transforming_liquid.push_back(data->transforming_liquid.front()); data->transforming_liquid.pop_front(); } - /* - Do stuff in central blocks - */ - - /* - Update lighting - */ - { -#if 0 - TimeTaker t("finishBlockMake lighting update"); - - core::map lighting_update_blocks; - - // Center blocks - for(s16 x=blockpos_min.X-extra_borders.X; - x<=blockpos_max.X+extra_borders.X; x++) - for(s16 z=blockpos_min.Z-extra_borders.Z; - z<=blockpos_max.Z+extra_borders.Z; z++) - for(s16 y=blockpos_min.Y-extra_borders.Y; - y<=blockpos_max.Y+extra_borders.Y; y++) - { - v3s16 p(x, y, z); - MapBlock *block = getBlockNoCreateNoEx(p); - assert(block); - lighting_update_blocks.insert(block->getPos(), block); - } - - updateLighting(lighting_update_blocks, changed_blocks); -#endif - - /* - Set lighting to non-expired state in all of them. - This is cheating, but it is not fast enough if all of them - would actually be updated. - */ - for(s16 x=blockpos_min.X-extra_borders.X; - x<=blockpos_max.X+extra_borders.X; x++) - for(s16 z=blockpos_min.Z-extra_borders.Z; - z<=blockpos_max.Z+extra_borders.Z; z++) - for(s16 y=blockpos_min.Y-extra_borders.Y; - y<=blockpos_max.Y+extra_borders.Y; y++) - { - v3s16 p(x, y, z); - MapBlock * block = getBlockNoCreateNoEx(p); - if (block != NULL) - block->setLightingExpired(false); - } - -#if 0 - if(enable_mapgen_debug_info == false) - t.stop(true); // Hide output -#endif - } - - /* - Go through changed blocks - */ - for(std::map::iterator i = changed_blocks.begin(); - i != changed_blocks.end(); ++i) - { - MapBlock *block = i->second; + for (std::map::iterator + it = changed_blocks->begin(); + it != changed_blocks->end(); ++it) { + MapBlock *block = it->second; if (!block) continue; /* @@ -2418,14 +2401,13 @@ void ServerMap::finishBlockMake(BlockMakeData *data, /* Set central blocks as generated */ - for(s16 x=blockpos_min.X; x<=blockpos_max.X; x++) - for(s16 z=blockpos_min.Z; z<=blockpos_max.Z; z++) - for(s16 y=blockpos_min.Y; y<=blockpos_max.Y; y++) - { - v3s16 p(x, y, z); - MapBlock *block = getBlockNoCreateNoEx(p); + for (s16 x = bpmin.X; x <= bpmax.X; x++) + for (s16 z = bpmin.Z; z <= bpmax.Z; z++) + for (s16 y = bpmin.Y; y <= bpmax.Y; y++) { + MapBlock *block = getBlockNoCreateNoEx(v3s16(x, y, z)); if (!block) continue; + block->setGenerated(true); } @@ -2434,42 +2416,12 @@ void ServerMap::finishBlockMake(BlockMakeData *data, NOTE: Will be saved later. */ //save(MOD_STATE_WRITE_AT_UNLOAD); - - /*infostream<<"finishBlockMake() done for ("< MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p2d.Y < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p2d.Y > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE) + const static u16 map_gen_limit = MYMIN(MAX_MAP_GENERATION_LIMIT, + g_settings->getU16("map_generation_limit")); + if(p2d.X < -map_gen_limit / MAP_BLOCKSIZE + || p2d.X > map_gen_limit / MAP_BLOCKSIZE + || p2d.Y < -map_gen_limit / MAP_BLOCKSIZE + || p2d.Y > map_gen_limit / MAP_BLOCKSIZE) throw InvalidPositionException("createSector(): pos. over limit"); /* @@ -2534,7 +2488,7 @@ MapBlock * ServerMap::generateBlock( std::map &modified_blocks ) { - DSTACKF("%s: p=(%d,%d,%d)", __FUNCTION_NAME, p.X, p.Y, p.Z); + DSTACKF("%s: p=(%d,%d,%d)", FUNCTION_NAME, p.X, p.Y, p.Z); /*infostream<<"generateBlock(): " <<"("< MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Y < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Y > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Z < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Z > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE) + if (blockpos_over_limit(p)) throw InvalidPositionException("createBlock(): pos. over limit"); v2s16 p2d(p.X, p.Z); @@ -2708,7 +2657,7 @@ MapBlock * ServerMap::createBlock(v3s16 p) MapBlock * ServerMap::emergeBlock(v3s16 p, bool create_blank) { DSTACKF("%s: p=(%d,%d,%d), create_blank=%d", - __FUNCTION_NAME, + FUNCTION_NAME, p.X, p.Y, p.Z, create_blank); { @@ -2849,7 +2798,7 @@ void ServerMap::createDirs(std::string path) { if(fs::CreateAllDirs(path) == false) { - m_dout< &dst) void ServerMap::saveMapMeta() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); createDirs(m_savedir); @@ -3067,7 +3016,7 @@ void ServerMap::saveMapMeta() void ServerMap::loadMapMeta() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); Settings conf; std::string fullpath = m_savedir + DIR_DELIM + "map_meta.txt"; @@ -3092,7 +3041,7 @@ void ServerMap::loadMapMeta() void ServerMap::saveSectorMeta(ServerMapSector *sector) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // Format used for writing u8 version = SER_FMT_VER_HIGHEST_WRITE; // Get destination @@ -3113,7 +3062,7 @@ void ServerMap::saveSectorMeta(ServerMapSector *sector) MapSector* ServerMap::loadSectorMeta(std::string sectordir, bool save_after_load) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // Get destination v2s16 p2d = getSectorPos(sectordir); @@ -3154,7 +3103,7 @@ MapSector* ServerMap::loadSectorMeta(std::string sectordir, bool save_after_load bool ServerMap::loadSectorMeta(v2s16 p2d) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // The directory layout we're going to load from. // 1 - original sectors/xxxxzzzz/ @@ -3196,7 +3145,7 @@ bool ServerMap::loadSectorMeta(v2s16 p2d) #if 0 bool ServerMap::loadSectorFull(v2s16 p2d) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); MapSector *sector = NULL; @@ -3265,7 +3214,10 @@ bool ServerMap::loadSectorFull(v2s16 p2d) } #endif -Database *ServerMap::createDatabase(const std::string &name, const std::string &savedir, Settings &conf) +Database *ServerMap::createDatabase( + const std::string &name, + const std::string &savedir, + Settings &conf) { if (name == "sqlite3") return new Database_SQLite3(savedir); @@ -3304,7 +3256,7 @@ bool ServerMap::saveBlock(MapBlock *block, Database *db) // Dummy blocks are not written if (block->isDummy()) { - errorstream << "WARNING: saveBlock: Not writing dummy block " + warningstream << "saveBlock: Not writing dummy block " << PP(p3d) << std::endl; return true; } @@ -3332,7 +3284,7 @@ bool ServerMap::saveBlock(MapBlock *block, Database *db) void ServerMap::loadBlock(std::string sectordir, std::string blockfile, MapSector *sector, bool save_after_load) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); std::string fullpath = sectordir + DIR_DELIM + blockfile; try { @@ -3394,7 +3346,7 @@ void ServerMap::loadBlock(std::string sectordir, std::string blockfile, } catch(SerializationError &e) { - infostream<<"WARNING: Invalid block data on disk " + warningstream<<"Invalid block data on disk " <<"fullpath="< unknown_contents; content_t id_counter = 0; @@ -500,7 +501,7 @@ static void getBlockNodeIdMapping(NameIdMapping *nimap, MapNode *nodes, } for(std::set::const_iterator i = unknown_contents.begin(); - i != unknown_contents.end(); i++){ + i != unknown_contents.end(); ++i){ errorstream<<"getBlockNodeIdMapping(): IGNORING ERROR: " <<"Name for node id "<<(*i)<<" not known"<::const_iterator i = unnamed_contents.begin(); - i != unnamed_contents.end(); i++){ + i != unnamed_contents.end(); ++i){ errorstream<<"correctBlockNodeIds(): IGNORING ERROR: " <<"Block contains id "<<(*i) <<" with no name mapping"<::const_iterator i = unallocatable_contents.begin(); - i != unallocatable_contents.end(); i++){ + i != unallocatable_contents.end(); ++i){ errorstream<<"correctBlockNodeIds(): IGNORING ERROR: " <<"Could not allocate global id for node name \"" <<(*i)<<"\""<= 23) - m_node_metadata.deSerialize(iss, m_gamedef); + if (version >= 23) + m_node_metadata.deSerialize(iss, m_gamedef->idef()); else content_nodemeta_deserialize_legacy(iss, - &m_node_metadata, &m_node_timers, - m_gamedef); - } - catch(SerializationError &e) - { - errorstream<<"WARNING: MapBlock::deSerialize(): Ignoring an error" + &m_node_metadata, &m_node_timers, + m_gamedef->idef()); + } catch(SerializationError &e) { + warningstream<<"MapBlock::deSerialize(): Ignoring an error" <<" while deserializing node metadata at (" < databuf_nodelist(nodecount * ser_length); // These have no compression - if(version <= 3 || version == 5 || version == 6) - { + if (version <= 3 || version == 5 || version == 6) { char tmp; is.read(&tmp, 1); - if(is.gcount() != 1) - throw SerializationError - ("MapBlock::deSerialize: no enough input data"); + if (is.gcount() != 1) + throw SerializationError(std::string(FUNCTION_NAME) + + ": not enough input data"); is_underground = tmp; - is.read((char*)*databuf_nodelist, nodecount * ser_length); - if((u32)is.gcount() != nodecount * ser_length) - throw SerializationError - ("MapBlock::deSerialize: no enough input data"); - } - else if(version <= 10) - { + is.read((char *)*databuf_nodelist, nodecount * ser_length); + if ((u32)is.gcount() != nodecount * ser_length) + throw SerializationError(std::string(FUNCTION_NAME) + + ": not enough input data"); + } else if (version <= 10) { u8 t8; - is.read((char*)&t8, 1); + is.read((char *)&t8, 1); is_underground = t8; { @@ -817,11 +813,10 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) std::ostringstream os(std::ios_base::binary); decompress(is, os, version); std::string s = os.str(); - if(s.size() != nodecount) - throw SerializationError - ("MapBlock::deSerialize: invalid format"); - for(u32 i=0; i= 10) - { + if (version >= 10) { // Uncompress and set param2 data std::ostringstream os(std::ios_base::binary); decompress(is, os, version); std::string s = os.str(); - if(s.size() != nodecount) - throw SerializationError - ("MapBlock::deSerialize: invalid format"); - for(u32 i=0; i= 14) - { + if (version >= 14) { // Ignore errors - try{ - if(version <= 15) - { + try { + if (version <= 15) { std::string data = deSerializeString(is); std::istringstream iss(data, std::ios_base::binary); content_nodemeta_deserialize_legacy(iss, - &m_node_metadata, &m_node_timers, - m_gamedef); - } - else - { + &m_node_metadata, &m_node_timers, + m_gamedef->idef()); + } else { //std::string data = deSerializeLongString(is); std::ostringstream oss(std::ios_base::binary); decompressZlib(is, oss); std::istringstream iss(oss.str(), std::ios_base::binary); content_nodemeta_deserialize_legacy(iss, - &m_node_metadata, &m_node_timers, - m_gamedef); + &m_node_metadata, &m_node_timers, + m_gamedef->idef()); } - } - catch(SerializationError &e) - { - errorstream<<"WARNING: MapBlock::deSerialize(): Ignoring an error" + } catch(SerializationError &e) { + warningstream<<"MapBlock::deSerialize(): Ignoring an error" <<" while deserializing node metadata"<= 9){ + if (version >= 9) { u16 count = readU16(is); // Not supported and length not known if count is not 0 if(count != 0){ - errorstream<<"WARNING: MapBlock::deSerialize_pre22(): " + warningstream<<"MapBlock::deSerialize_pre22(): " <<"Ignoring stuff coming at and after MBOs"<= 15) + if (version >= 15) m_static_objects.deSerialize(is); // Timestamp - if(version >= 17){ + if (version >= 17) { setTimestamp(readU32(is)); m_disk_timestamp = m_timestamp; } else { @@ -954,7 +933,7 @@ void MapBlock::deSerialize_pre22(std::istream &is, u8 version, bool disk) // Dynamically re-set ids based on node names NameIdMapping nimap; // If supported, read node definition id mapping - if(version >= 21){ + if (version >= 21) { nimap.deSerialize(is); // Else set the legacy mapping } else { diff --git a/src/mapblock.h b/src/mapblock.h index e40aa7bd..3e99da90 100644 --- a/src/mapblock.h +++ b/src/mapblock.h @@ -31,6 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "nodetimer.h" #include "modifiedstate.h" #include "util/numeric.h" // getContainerPos +#include "settings.h" class Map; class NodeMetadataList; @@ -258,7 +259,7 @@ public: inline v3s16 getPosRelative() { - return m_pos * MAP_BLOCKSIZE; + return m_pos_relative; } inline core::aabbox3d getBox() @@ -503,7 +504,7 @@ public: // These don't write or read version by itself // Set disk to true for on-disk format, false for over-the-network format - // Precondition: version >= SER_FMT_CLIENT_VER_LOWEST + // Precondition: version >= SER_FMT_VER_LOWEST_WRITE void serialize(std::ostream &os, u8 version, bool disk); // If disk == true: In addition to doing other things, will add // unknown blocks from id-name mapping to wndef @@ -564,6 +565,14 @@ private: // Position in blocks on parent v3s16 m_pos; + /* This is the precalculated m_pos_relative value + * This caches the value, improving performance by removing 3 s16 multiplications + * at runtime on each getPosRelative call + * For a 5 minutes runtime with valgrind this removes 3 * 19M s16 multiplications + * The gain can be estimated in Release Build to 3 * 100M multiply operations for 5 mins + */ + v3s16 m_pos_relative; + IGameDef *m_gamedef; /* @@ -628,15 +637,28 @@ private: typedef std::vector MapBlockVect; +inline bool objectpos_over_limit(v3f p) +{ + const static float map_gen_limit_bs = MYMIN(MAX_MAP_GENERATION_LIMIT, + g_settings->getU16("map_generation_limit")) * BS; + return (p.X < -map_gen_limit_bs + || p.X > map_gen_limit_bs + || p.Y < -map_gen_limit_bs + || p.Y > map_gen_limit_bs + || p.Z < -map_gen_limit_bs + || p.Z > map_gen_limit_bs); +} + inline bool blockpos_over_limit(v3s16 p) { - return - (p.X < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.X > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Y < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Y > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Z < -MAP_GENERATION_LIMIT / MAP_BLOCKSIZE - || p.Z > MAP_GENERATION_LIMIT / MAP_BLOCKSIZE); + const static u16 map_gen_limit = MYMIN(MAX_MAP_GENERATION_LIMIT, + g_settings->getU16("map_generation_limit")); + return (p.X < -map_gen_limit / MAP_BLOCKSIZE + || p.X > map_gen_limit / MAP_BLOCKSIZE + || p.Y < -map_gen_limit / MAP_BLOCKSIZE + || p.Y > map_gen_limit / MAP_BLOCKSIZE + || p.Z < -map_gen_limit / MAP_BLOCKSIZE + || p.Z > map_gen_limit / MAP_BLOCKSIZE); } /* @@ -673,4 +695,3 @@ inline void getNodeSectorPosWithOffset(const v2s16 &p, v2s16 &block, v2s16 &offs std::string analyze_block(MapBlock *block); #endif - diff --git a/src/mapblock_mesh.cpp b/src/mapblock_mesh.cpp index 9c87b6b4..9d1b73b3 100644 --- a/src/mapblock_mesh.cpp +++ b/src/mapblock_mesh.cpp @@ -25,11 +25,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "nodedef.h" #include "gamedef.h" #include "mesh.h" +#include "minimap.h" #include "content_mapblock.h" #include "noise.h" #include "shader.h" #include "settings.h" #include "util/directiontables.h" +#include static void applyFacesShading(video::SColor& color, float factor) { @@ -1027,7 +1029,10 @@ static void updateAllFastFaceRows(MeshMakeData *data, MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): m_mesh(new scene::SMesh()), + m_minimap_mapblock(NULL), m_gamedef(data->m_gamedef), + m_tsrc(m_gamedef->getTextureSource()), + m_shdrsrc(m_gamedef->getShaderSource()), m_animation_force_timer(0), // force initial animation m_last_crack(-1), m_crack_materials(), @@ -1038,6 +1043,12 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): m_enable_shaders = data->m_use_shaders; m_enable_highlighting = g_settings->getBool("enable_node_highlighting"); + if (g_settings->getBool("enable_minimap")) { + m_minimap_mapblock = new MinimapMapblock; + m_minimap_mapblock->getMinimapNodes( + &data->m_vmanip, data->m_blockpos * MAP_BLOCKSIZE); + } + // 4-21ms for MAP_BLOCKSIZE=16 (NOTE: probably outdated) // 24-155ms for MAP_BLOCKSIZE=32 (NOTE: probably outdated) //TimeTaker timer1("MapBlockMesh()"); @@ -1110,8 +1121,6 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): /* Convert MeshCollector to SMesh */ - ITextureSource *tsrc = m_gamedef->tsrc(); - IShaderSource *shdrsrc = m_gamedef->getShaderSource(); for(u32 i = 0; i < collector.prebuffers.size(); i++) { @@ -1123,13 +1132,13 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): { // Find the texture name plus ^[crack:N: std::ostringstream os(std::ios::binary); - os<getTextureName(p.tile.texture_id)<<"^[crack"; + os<getTextureName(p.tile.texture_id)<<"^[crack"; if(p.tile.material_flags & MATERIAL_FLAG_CRACK_OVERLAY) os<<"o"; // use ^[cracko os<<":"<<(u32)p.tile.animation_frame_count<<":"; m_crack_materials.insert(std::make_pair(i, os.str())); // Replace tile texture with the cracked one - p.tile.texture = tsrc->getTextureForMesh( + p.tile.texture = m_tsrc->getTextureForMesh( os.str()+"0", &p.tile.texture_id); } @@ -1154,24 +1163,25 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): } if(m_enable_highlighting && p.tile.material_flags & MATERIAL_FLAG_HIGHLIGHTED) - m_highlighted_materials.push_back(i); + m_highlighted_materials.push_back(i); for(u32 j = 0; j < p.vertices.size(); j++) { + video::S3DVertexTangents *vertex = &p.vertices[j]; // Note applyFacesShading second parameter is precalculated sqrt // value for speed improvement // Skip it for lightsources and top faces. - video::SColor &vc = p.vertices[j].Color; + video::SColor &vc = vertex->Color; if (!vc.getBlue()) { - if (p.vertices[j].Normal.Y < -0.5) { + if (vertex->Normal.Y < -0.5) { applyFacesShading (vc, 0.447213); - } else if (p.vertices[j].Normal.X > 0.5) { + } else if (vertex->Normal.X > 0.5) { applyFacesShading (vc, 0.670820); - } else if (p.vertices[j].Normal.X < -0.5) { + } else if (vertex->Normal.X < -0.5) { applyFacesShading (vc, 0.670820); - } else if (p.vertices[j].Normal.Z > 0.5) { + } else if (vertex->Normal.Z > 0.5) { applyFacesShading (vc, 0.836660); - } else if (p.vertices[j].Normal.Z < -0.5) { + } else if (vertex->Normal.Z < -0.5) { applyFacesShading (vc, 0.836660); } } @@ -1199,33 +1209,28 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): material.MaterialType = video::EMT_TRANSPARENT_ADD_COLOR; } else { if (m_enable_shaders) { - material.MaterialType = shdrsrc->getShaderInfo(p.tile.shader_id).material; + material.MaterialType = m_shdrsrc->getShaderInfo(p.tile.shader_id).material; p.tile.applyMaterialOptionsWithShaders(material); if (p.tile.normal_texture) { material.setTexture(1, p.tile.normal_texture); - material.setTexture(2, tsrc->getTextureForMesh("enable_img.png")); - } else { - material.setTexture(2, tsrc->getTextureForMesh("disable_img.png")); } + material.setTexture(2, p.tile.flags_texture); } else { p.tile.applyMaterialOptions(material); } } - // Create meshbuffer - // This is a "Standard MeshBuffer", - // it's a typedeffed CMeshBuffer - scene::SMeshBuffer *buf = new scene::SMeshBuffer(); - // Set material - buf->Material = material; - // Add to mesh - m_mesh->addMeshBuffer(buf); - // Mesh grabbed it - buf->drop(); - buf->append(&p.vertices[0], p.vertices.size(), - &p.indices[0], p.indices.size()); - } - + // Create meshbuffer + scene::SMeshBufferTangents *buf = new scene::SMeshBufferTangents(); + // Set material + buf->Material = material; + // Add to mesh + m_mesh->addMeshBuffer(buf); + // Mesh grabbed it + buf->drop(); + buf->append(&p.vertices[0], p.vertices.size(), + &p.indices[0], p.indices.size()); +} m_camera_offset = camera_offset; /* @@ -1234,6 +1239,11 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): translateMesh(m_mesh, intToFloat(data->m_blockpos * MAP_BLOCKSIZE - camera_offset, BS)); + if (m_enable_shaders) { + scene::IMeshManipulator* meshmanip = m_gamedef->getSceneManager()->getMeshManipulator(); + meshmanip->recalculateTangents(m_mesh, true, false, false); + } + if(m_mesh) { #if 0 @@ -1268,11 +1278,11 @@ MapBlockMesh::~MapBlockMesh() { m_mesh->drop(); m_mesh = NULL; + delete m_minimap_mapblock; } bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_ratio) { - if(!m_has_animation) { m_animation_force_timer = 100000; @@ -1286,18 +1296,17 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat { for(std::map::iterator i = m_crack_materials.begin(); - i != m_crack_materials.end(); i++) + i != m_crack_materials.end(); ++i) { scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(i->first); std::string basename = i->second; // Create new texture name from original - ITextureSource *tsrc = m_gamedef->getTextureSource(); std::ostringstream os; os<getTextureForMesh(os.str(), &new_texture_id); + m_tsrc->getTextureForMesh(os.str(), &new_texture_id); buf->getMaterial().setTexture(0, new_texture); // If the current material is also animated, @@ -1319,7 +1328,7 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat // Texture animation for(std::map::iterator i = m_animation_tiles.begin(); - i != m_animation_tiles.end(); i++) + i != m_animation_tiles.end(); ++i) { const TileSpec &tile = i->second; // Figure out current frame @@ -1333,17 +1342,14 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat m_animation_frames[i->first] = frame; scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(i->first); - ITextureSource *tsrc = m_gamedef->getTextureSource(); FrameSpec animation_frame = tile.frames[frame]; buf->getMaterial().setTexture(0, animation_frame.texture); if (m_enable_shaders) { if (animation_frame.normal_texture) { buf->getMaterial().setTexture(1, animation_frame.normal_texture); - buf->getMaterial().setTexture(2, tsrc->getTextureForMesh("enable_img.png")); - } else { - buf->getMaterial().setTexture(2, tsrc->getTextureForMesh("disable_img.png")); } + buf->getMaterial().setTexture(2, animation_frame.flags_texture); } } @@ -1352,19 +1358,17 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat { for(std::map > >::iterator i = m_daynight_diffs.begin(); - i != m_daynight_diffs.end(); i++) + i != m_daynight_diffs.end(); ++i) { scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(i->first); - video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices(); + video::S3DVertexTangents *vertices = (video::S3DVertexTangents *)buf->getVertices(); for(std::map >::iterator j = i->second.begin(); - j != i->second.end(); j++) + j != i->second.end(); ++j) { - u32 vertexIndex = j->first; u8 day = j->second.first; u8 night = j->second.second; - finalColorBlend(vertices[vertexIndex].Color, - day, night, daynight_ratio); + finalColorBlend(vertices[j->first].Color, day, night, daynight_ratio); } } m_last_daynight_ratio = daynight_ratio; @@ -1373,7 +1377,7 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat // Node highlighting if (m_enable_highlighting) { u8 day = m_highlight_mesh_color.getRed(); - u8 night = m_highlight_mesh_color.getGreen(); + u8 night = m_highlight_mesh_color.getGreen(); video::SColor hc; finalColorBlend(hc, day, night, daynight_ratio); float sin_r = 0.07 * sin(1.5 * time); @@ -1385,10 +1389,10 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat for(std::list::iterator i = m_highlighted_materials.begin(); - i != m_highlighted_materials.end(); i++) + i != m_highlighted_materials.end(); ++i) { scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(*i); - video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices(); + video::S3DVertexTangents *vertices = (video::S3DVertexTangents*)buf->getVertices(); for (u32 j = 0; j < buf->getVertexCount() ;j++) vertices[j].Color = hc; } @@ -1413,42 +1417,40 @@ void MeshCollector::append(const TileSpec &tile, const video::S3DVertex *vertices, u32 numVertices, const u16 *indices, u32 numIndices) { - if(numIndices > 65535) - { + if (numIndices > 65535) { dstream<<"FIXME: MeshCollector::append() called with numIndices="< 65535) + if (pp.indices.size() + numIndices > 65535) continue; p = &pp; break; } - if(p == NULL) - { + if (p == NULL) { PreMeshBuffer pp; pp.tile = tile; prebuffers.push_back(pp); - p = &prebuffers[prebuffers.size()-1]; + p = &prebuffers[prebuffers.size() - 1]; } u32 vertex_count = p->vertices.size(); - for(u32 i=0; iindices.push_back(j); } - for(u32 i=0; ivertices.push_back(vertices[i]); + + for (u32 i = 0; i < numVertices; i++) { + video::S3DVertexTangents vert(vertices[i].Pos, vertices[i].Normal, + vertices[i].Color, vertices[i].TCoords); + p->vertices.push_back(vert); } } @@ -1461,15 +1463,13 @@ void MeshCollector::append(const TileSpec &tile, const u16 *indices, u32 numIndices, v3f pos, video::SColor c) { - if(numIndices > 65535) - { + if (numIndices > 65535) { dstream<<"FIXME: MeshCollector::append() called with numIndices="<vertices.size(); - for(u32 i=0; iindices.push_back(j); } - for(u32 i=0; ivertices.push_back(vert); } } diff --git a/src/mapblock_mesh.h b/src/mapblock_mesh.h index 7549e3c3..7f70d401 100644 --- a/src/mapblock_mesh.h +++ b/src/mapblock_mesh.h @@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include class IGameDef; +class IShaderSource; /* Mesh making stuff @@ -33,6 +34,7 @@ class IGameDef; class MapBlock; +struct MinimapMapblock; struct MeshMakeData { @@ -102,11 +104,18 @@ public: // Returns true if anything has been changed. bool animate(bool faraway, float time, int crack, u32 daynight_ratio); - scene::SMesh* getMesh() + scene::SMesh *getMesh() { return m_mesh; } + MinimapMapblock *moveMinimapMapblock() + { + MinimapMapblock *p = m_minimap_mapblock; + m_minimap_mapblock = NULL; + return p; + } + bool isAnimationForced() const { return m_animation_force_timer == 0; @@ -122,7 +131,10 @@ public: private: scene::SMesh *m_mesh; + MinimapMapblock *m_minimap_mapblock; IGameDef *m_gamedef; + ITextureSource *m_tsrc; + IShaderSource *m_shdrsrc; bool m_enable_shaders; bool m_enable_highlighting; @@ -165,13 +177,12 @@ struct PreMeshBuffer { TileSpec tile; std::vector indices; - std::vector vertices; + std::vector vertices; }; struct MeshCollector { std::vector prebuffers; - void append(const TileSpec &material, const video::S3DVertex *vertices, u32 numVertices, const u16 *indices, u32 numIndices); diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 8718ed6b..6fb96175 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -29,7 +29,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "content_sao.h" #include "nodedef.h" #include "emerge.h" -#include "content_mapnode.h" // For content_mapnode_get_new_name #include "voxelalgorithms.h" #include "porting.h" #include "profiler.h" @@ -62,38 +61,43 @@ FlagDesc flagdesc_gennotify[] = { }; -/////////////////////////////////////////////////////////////////////////////// - +//// +//// Mapgen +//// Mapgen::Mapgen() { - generating = false; - id = -1; - seed = 0; - water_level = 0; - flags = 0; + generating = false; + id = -1; + seed = 0; + water_level = 0; + flags = 0; - vm = NULL; - ndef = NULL; - heightmap = NULL; - biomemap = NULL; + vm = NULL; + ndef = NULL; + heightmap = NULL; + biomemap = NULL; + heatmap = NULL; + humidmap = NULL; } Mapgen::Mapgen(int mapgenid, MapgenParams *params, EmergeManager *emerge) : gennotify(emerge->gen_notify_on, &emerge->gen_notify_on_deco_ids) { - generating = false; - id = mapgenid; - seed = (int)params->seed; - water_level = params->water_level; - flags = params->flags; - csize = v3s16(1, 1, 1) * (params->chunksize * MAP_BLOCKSIZE); + generating = false; + id = mapgenid; + seed = (int)params->seed; + water_level = params->water_level; + flags = params->flags; + csize = v3s16(1, 1, 1) * (params->chunksize * MAP_BLOCKSIZE); vm = NULL; ndef = NULL; heightmap = NULL; biomemap = NULL; + heatmap = NULL; + humidmap = NULL; } @@ -139,7 +143,7 @@ s16 Mapgen::findGroundLevelFull(v2s16 p2d) } -// Returns -MAP_GENERATION_LIMIT if not found +// Returns -MAX_MAP_GENERATION_LIMIT if not found s16 Mapgen::findGroundLevel(v2s16 p2d, s16 ymin, s16 ymax) { v3s16 em = vm->m_area.getExtent(); @@ -153,7 +157,27 @@ s16 Mapgen::findGroundLevel(v2s16 p2d, s16 ymin, s16 ymax) vm->m_area.add_y(em, i, -1); } - return (y >= ymin) ? y : -MAP_GENERATION_LIMIT; + return (y >= ymin) ? y : -MAX_MAP_GENERATION_LIMIT; +} + + +// Returns -MAX_MAP_GENERATION_LIMIT if not found or if ground is found first +s16 Mapgen::findLiquidSurface(v2s16 p2d, s16 ymin, s16 ymax) +{ + v3s16 em = vm->m_area.getExtent(); + u32 i = vm->m_area.index(p2d.X, ymax, p2d.Y); + s16 y; + + for (y = ymax; y >= ymin; y--) { + MapNode &n = vm->m_data[i]; + if (ndef->get(n).walkable) + return -MAX_MAP_GENERATION_LIMIT; + else if (ndef->get(n).isLiquid()) + break; + + vm->m_area.add_y(em, i, -1); + } + return (y >= ymin) ? y : -MAX_MAP_GENERATION_LIMIT; } @@ -337,32 +361,9 @@ void Mapgen::spreadLight(v3s16 nmin, v3s16 nmax) } - -void Mapgen::calcLightingOld(v3s16 nmin, v3s16 nmax) -{ - enum LightBank banks[2] = {LIGHTBANK_DAY, LIGHTBANK_NIGHT}; - VoxelArea a(nmin, nmax); - bool block_is_underground = (water_level > nmax.Y); - bool sunlight = !block_is_underground; - - ScopeProfiler sp(g_profiler, "EmergeThread: mapgen lighting update", SPT_AVG); - - for (int i = 0; i < 2; i++) { - enum LightBank bank = banks[i]; - std::set light_sources; - std::map unlight_from; - - voxalgo::clearLightAndCollectSources(*vm, a, bank, ndef, - light_sources, unlight_from); - voxalgo::propagateSunlight(*vm, a, sunlight, light_sources, ndef); - - vm->unspreadLight(bank, unlight_from, light_sources, ndef); - vm->spreadLight(bank, light_sources, ndef); - } -} - - -/////////////////////////////////////////////////////////////////////////////// +//// +//// GenerateNotifier +//// GenerateNotifier::GenerateNotifier() { @@ -428,7 +429,10 @@ void GenerateNotifier::getEvents( m_notify_events.clear(); } -/////////////////////////////////////////////////////////////////////////////// + +//// +//// MapgenParams +//// void MapgenParams::load(const Settings &settings) { @@ -445,12 +449,16 @@ void MapgenParams::load(const Settings &settings) settings.getS16NoEx("chunksize", chunksize); settings.getFlagStrNoEx("mg_flags", flags, flagdesc_mapgen); settings.getNoiseParams("mg_biome_np_heat", np_biome_heat); + settings.getNoiseParams("mg_biome_np_heat_blend", np_biome_heat_blend); settings.getNoiseParams("mg_biome_np_humidity", np_biome_humidity); + settings.getNoiseParams("mg_biome_np_humidity_blend", np_biome_humidity_blend); delete sparams; - sparams = EmergeManager::createMapgenParams(mg_name); - if (sparams) + MapgenFactory *mgfactory = EmergeManager::getMapgenFactory(mg_name); + if (mgfactory) { + sparams = mgfactory->createMapgenParams(); sparams->readParams(&settings); + } } @@ -460,11 +468,12 @@ void MapgenParams::save(Settings &settings) const settings.setU64("seed", seed); settings.setS16("water_level", water_level); settings.setS16("chunksize", chunksize); - settings.setFlagStr("mg_flags", flags, flagdesc_mapgen, (u32)-1); + settings.setFlagStr("mg_flags", flags, flagdesc_mapgen, U32_MAX); settings.setNoiseParams("mg_biome_np_heat", np_biome_heat); + settings.setNoiseParams("mg_biome_np_heat_blend", np_biome_heat_blend); settings.setNoiseParams("mg_biome_np_humidity", np_biome_humidity); + settings.setNoiseParams("mg_biome_np_humidity_blend", np_biome_humidity_blend); if (sparams) sparams->writeParams(&settings); } - diff --git a/src/mapgen.h b/src/mapgen.h index c727cf4f..705aef4b 100644 --- a/src/mapgen.h +++ b/src/mapgen.h @@ -115,7 +115,9 @@ struct MapgenParams { u32 flags; NoiseParams np_biome_heat; + NoiseParams np_biome_heat_blend; NoiseParams np_biome_humidity; + NoiseParams np_biome_humidity_blend; MapgenSpecificParams *sparams; @@ -126,7 +128,9 @@ struct MapgenParams { water_level(1), flags(MG_TREES | MG_CAVES | MG_LIGHT), np_biome_heat(NoiseParams(50, 50, v3f(750.0, 750.0, 750.0), 5349, 3, 0.5, 2.0)), + np_biome_heat_blend(NoiseParams(0, 1.5, v3f(8.0, 8.0, 8.0), 13, 2, 1.0, 2.0)), np_biome_humidity(NoiseParams(50, 50, v3f(750.0, 750.0, 750.0), 842, 3, 0.5, 2.0)), + np_biome_humidity_blend(NoiseParams(0, 1.5, v3f(8.0, 8.0, 8.0), 90003, 2, 1.0, 2.0)), sparams(NULL) {} @@ -148,6 +152,8 @@ public: u32 blockseed; s16 *heightmap; u8 *biomemap; + float *heatmap; + float *humidmap; v3s16 csize; GenerateNotifier gennotify; @@ -160,6 +166,7 @@ public: static u32 getBlockSeed2(v3s16 p, int seed); s16 findGroundLevelFull(v2s16 p2d); s16 findGroundLevel(v2s16 p2d, s16 ymin, s16 ymax); + s16 findLiquidSurface(v2s16 p2d, s16 ymin, s16 ymax); void updateHeightmap(v3s16 nmin, v3s16 nmax); void updateLiquid(UniqueQueue *trans_liquid, v3s16 nmin, v3s16 nmax); @@ -173,10 +180,11 @@ public: void propagateSunlight(v3s16 nmin, v3s16 nmax); void spreadLight(v3s16 nmin, v3s16 nmax); - void calcLightingOld(v3s16 nmin, v3s16 nmax); - virtual void makeChunk(BlockMakeData *data) {} virtual int getGroundLevelAtPoint(v2s16 p) { return 0; } + +private: + DISABLE_CLASS_COPY(Mapgen); }; struct MapgenFactory { diff --git a/src/mapgen_fractal.cpp b/src/mapgen_fractal.cpp new file mode 100644 index 00000000..0778f58b --- /dev/null +++ b/src/mapgen_fractal.cpp @@ -0,0 +1,640 @@ +/* +Minetest +Copyright (C) 2010-2015 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 paramat, Matt Gregory + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 3.0 of the License, or +(at your option) any later version. + +This program 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 Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + + +#include "mapgen.h" +#include "voxel.h" +#include "noise.h" +#include "mapblock.h" +#include "mapnode.h" +#include "map.h" +#include "content_sao.h" +#include "nodedef.h" +#include "voxelalgorithms.h" +#include "profiler.h" // For TimeTaker +#include "settings.h" // For g_settings +#include "emerge.h" +#include "dungeongen.h" +#include "cavegen.h" +#include "treegen.h" +#include "mg_biome.h" +#include "mg_ore.h" +#include "mg_decoration.h" +#include "mapgen_fractal.h" + + +FlagDesc flagdesc_mapgen_fractal[] = { + {"julia", MGFRACTAL_JULIA}, + {NULL, 0} +}; + +/////////////////////////////////////////////////////////////////////////////////////// + + +MapgenFractal::MapgenFractal(int mapgenid, MapgenParams *params, EmergeManager *emerge) + : Mapgen(mapgenid, params, emerge) +{ + this->m_emerge = emerge; + this->bmgr = emerge->biomemgr; + + //// amount of elements to skip for the next index + //// for noise/height/biome maps (not vmanip) + this->ystride = csize.X; + this->zstride = csize.X * (csize.Y + 2); + + this->biomemap = new u8[csize.X * csize.Z]; + this->heightmap = new s16[csize.X * csize.Z]; + this->heatmap = NULL; + this->humidmap = NULL; + + MapgenFractalParams *sp = (MapgenFractalParams *)params->sparams; + this->spflags = sp->spflags; + + this->m_iterations = sp->m_iterations; + this->m_scale = sp->m_scale; + this->m_offset = sp->m_offset; + this->m_slice_w = sp->m_slice_w; + + this->j_iterations = sp->j_iterations; + this->j_scale = sp->j_scale; + this->j_offset = sp->j_offset; + this->j_slice_w = sp->j_slice_w; + this->julia_x = sp->julia_x; + this->julia_y = sp->julia_y; + this->julia_z = sp->julia_z; + this->julia_w = sp->julia_w; + + //// 2D terrain noise + noise_seabed = new Noise(&sp->np_seabed, seed, csize.X, csize.Z); + noise_filler_depth = new Noise(&sp->np_filler_depth, seed, csize.X, csize.Z); + + //// 3D terrain noise + noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 2, csize.Z); + noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z); + + //// Biome noise + noise_heat = new Noise(¶ms->np_biome_heat, seed, csize.X, csize.Z); + noise_humidity = new Noise(¶ms->np_biome_humidity, seed, csize.X, csize.Z); + noise_heat_blend = new Noise(¶ms->np_biome_heat_blend, seed, csize.X, csize.Z); + noise_humidity_blend = new Noise(¶ms->np_biome_humidity_blend, seed, csize.X, csize.Z); + + //// Resolve nodes to be used + INodeDefManager *ndef = emerge->ndef; + + c_stone = ndef->getId("mapgen_stone"); + c_water_source = ndef->getId("mapgen_water_source"); + c_lava_source = ndef->getId("mapgen_lava_source"); + c_desert_stone = ndef->getId("mapgen_desert_stone"); + c_ice = ndef->getId("mapgen_ice"); + c_sandstone = ndef->getId("mapgen_sandstone"); + + c_cobble = ndef->getId("mapgen_cobble"); + c_stair_cobble = ndef->getId("mapgen_stair_cobble"); + c_mossycobble = ndef->getId("mapgen_mossycobble"); + c_sandstonebrick = ndef->getId("mapgen_sandstonebrick"); + c_stair_sandstonebrick = ndef->getId("mapgen_stair_sandstonebrick"); + + if (c_ice == CONTENT_IGNORE) + c_ice = CONTENT_AIR; + if (c_mossycobble == CONTENT_IGNORE) + c_mossycobble = c_cobble; + if (c_stair_cobble == CONTENT_IGNORE) + c_stair_cobble = c_cobble; + if (c_sandstonebrick == CONTENT_IGNORE) + c_sandstonebrick = c_sandstone; + if (c_stair_sandstonebrick == CONTENT_IGNORE) + c_stair_sandstonebrick = c_sandstone; +} + + +MapgenFractal::~MapgenFractal() +{ + delete noise_seabed; + delete noise_filler_depth; + delete noise_cave1; + delete noise_cave2; + + delete noise_heat; + delete noise_humidity; + delete noise_heat_blend; + delete noise_humidity_blend; + + delete[] heightmap; + delete[] biomemap; +} + + +MapgenFractalParams::MapgenFractalParams() +{ + spflags = 0; + + m_iterations = 9; // Mandelbrot set only + m_scale = v3f(1024.0, 256.0, 1024.0); + m_offset = v3f(1.75, 0.0, 0.0); + m_slice_w = 0.0; + + j_iterations = 9; // Julia set only + j_scale = v3f(2048.0, 512.0, 2048.0); + j_offset = v3f(0.0, 1.0, 0.0); + j_slice_w = 0.0; + julia_x = 0.33; + julia_y = 0.33; + julia_z = 0.33; + julia_w = 0.33; + + np_seabed = NoiseParams(-14, 9, v3f(600, 600, 600), 41900, 5, 0.6, 2.0); + np_filler_depth = NoiseParams(0, 1.2, v3f(150, 150, 150), 261, 3, 0.7, 2.0); + np_cave1 = NoiseParams(0, 12, v3f(128, 128, 128), 52534, 4, 0.5, 2.0); + np_cave2 = NoiseParams(0, 12, v3f(128, 128, 128), 10325, 4, 0.5, 2.0); +} + + +void MapgenFractalParams::readParams(const Settings *settings) +{ + settings->getFlagStrNoEx("mgfractal_spflags", spflags, flagdesc_mapgen_fractal); + + settings->getU16NoEx("mgfractal_m_iterations", m_iterations); + settings->getV3FNoEx("mgfractal_m_scale", m_scale); + settings->getV3FNoEx("mgfractal_m_offset", m_offset); + settings->getFloatNoEx("mgfractal_m_slice_w", m_slice_w); + + settings->getU16NoEx("mgfractal_j_iterations", j_iterations); + settings->getV3FNoEx("mgfractal_j_scale", j_scale); + settings->getV3FNoEx("mgfractal_j_offset", j_offset); + settings->getFloatNoEx("mgfractal_j_slice_w", j_slice_w); + settings->getFloatNoEx("mgfractal_julia_x", julia_x); + settings->getFloatNoEx("mgfractal_julia_y", julia_y); + settings->getFloatNoEx("mgfractal_julia_z", julia_z); + settings->getFloatNoEx("mgfractal_julia_w", julia_w); + + settings->getNoiseParams("mgfractal_np_seabed", np_seabed); + settings->getNoiseParams("mgfractal_np_filler_depth", np_filler_depth); + settings->getNoiseParams("mgfractal_np_cave1", np_cave1); + settings->getNoiseParams("mgfractal_np_cave2", np_cave2); +} + + +void MapgenFractalParams::writeParams(Settings *settings) const +{ + settings->setFlagStr("mgfractal_spflags", spflags, flagdesc_mapgen_fractal, U32_MAX); + + settings->setU16("mgfractal_m_iterations", m_iterations); + settings->setV3F("mgfractal_m_scale", m_scale); + settings->setV3F("mgfractal_m_offset", m_offset); + settings->setFloat("mgfractal_m_slice_w", m_slice_w); + + settings->setU16("mgfractal_j_iterations", j_iterations); + settings->setV3F("mgfractal_j_scale", j_scale); + settings->setV3F("mgfractal_j_offset", j_offset); + settings->setFloat("mgfractal_j_slice_w", j_slice_w); + settings->setFloat("mgfractal_julia_x", julia_x); + settings->setFloat("mgfractal_julia_y", julia_y); + settings->setFloat("mgfractal_julia_z", julia_z); + settings->setFloat("mgfractal_julia_w", julia_w); + + settings->setNoiseParams("mgfractal_np_seabed", np_seabed); + settings->setNoiseParams("mgfractal_np_filler_depth", np_filler_depth); + settings->setNoiseParams("mgfractal_np_cave1", np_cave1); + settings->setNoiseParams("mgfractal_np_cave2", np_cave2); +} + + +///////////////////////////////////////////////////////////////// + + +int MapgenFractal::getGroundLevelAtPoint(v2s16 p) +{ + s16 search_start = 128; + s16 search_end = -128; + + for (s16 y = search_start; y >= search_end; y--) { + if (getFractalAtPoint(p.X, y, p.Y)) + return y; + } + + return -MAX_MAP_GENERATION_LIMIT; +} + + +void MapgenFractal::makeChunk(BlockMakeData *data) +{ + // Pre-conditions + assert(data->vmanip); + assert(data->nodedef); + assert(data->blockpos_requested.X >= data->blockpos_min.X && + data->blockpos_requested.Y >= data->blockpos_min.Y && + data->blockpos_requested.Z >= data->blockpos_min.Z); + assert(data->blockpos_requested.X <= data->blockpos_max.X && + data->blockpos_requested.Y <= data->blockpos_max.Y && + data->blockpos_requested.Z <= data->blockpos_max.Z); + + this->generating = true; + this->vm = data->vmanip; + this->ndef = data->nodedef; + TimeTaker t("makeChunk"); + + v3s16 blockpos_min = data->blockpos_min; + v3s16 blockpos_max = data->blockpos_max; + node_min = blockpos_min * MAP_BLOCKSIZE; + node_max = (blockpos_max + v3s16(1, 1, 1)) * MAP_BLOCKSIZE - v3s16(1, 1, 1); + full_node_min = (blockpos_min - 1) * MAP_BLOCKSIZE; + full_node_max = (blockpos_max + 2) * MAP_BLOCKSIZE - v3s16(1, 1, 1); + + blockseed = getBlockSeed2(full_node_min, seed); + + // Make some noise + calculateNoise(); + + // Generate base terrain, mountains, and ridges with initial heightmaps + s16 stone_surface_max_y = generateTerrain(); + + // Create heightmap + updateHeightmap(node_min, node_max); + + // Create biomemap at heightmap surface + bmgr->calcBiomes(csize.X, csize.Z, noise_heat->result, + noise_humidity->result, heightmap, biomemap); + + // Actually place the biome-specific nodes + MgStoneType stone_type = generateBiomes(noise_heat->result, noise_humidity->result); + + if (flags & MG_CAVES) + generateCaves(stone_surface_max_y); + + if ((flags & MG_DUNGEONS) && (stone_surface_max_y >= node_min.Y)) { + DungeonParams dp; + + dp.np_rarity = nparams_dungeon_rarity; + dp.np_density = nparams_dungeon_density; + dp.np_wetness = nparams_dungeon_wetness; + dp.c_water = c_water_source; + if (stone_type == STONE) { + dp.c_cobble = c_cobble; + dp.c_moss = c_mossycobble; + dp.c_stair = c_stair_cobble; + + dp.diagonal_dirs = false; + dp.mossratio = 3.0; + dp.holesize = v3s16(1, 2, 1); + dp.roomsize = v3s16(0, 0, 0); + dp.notifytype = GENNOTIFY_DUNGEON; + } else if (stone_type == DESERT_STONE) { + dp.c_cobble = c_desert_stone; + dp.c_moss = c_desert_stone; + dp.c_stair = c_desert_stone; + + dp.diagonal_dirs = true; + dp.mossratio = 0.0; + dp.holesize = v3s16(2, 3, 2); + dp.roomsize = v3s16(2, 5, 2); + dp.notifytype = GENNOTIFY_TEMPLE; + } else if (stone_type == SANDSTONE) { + dp.c_cobble = c_sandstonebrick; + dp.c_moss = c_sandstonebrick; + dp.c_stair = c_sandstonebrick; + + dp.diagonal_dirs = false; + dp.mossratio = 0.0; + dp.holesize = v3s16(2, 2, 2); + dp.roomsize = v3s16(2, 0, 2); + dp.notifytype = GENNOTIFY_DUNGEON; + } + + DungeonGen dgen(this, &dp); + dgen.generate(blockseed, full_node_min, full_node_max); + } + + // Generate the registered decorations + m_emerge->decomgr->placeAllDecos(this, blockseed, node_min, node_max); + + // Generate the registered ores + m_emerge->oremgr->placeAllOres(this, blockseed, node_min, node_max); + + // Sprinkle some dust on top after everything else was generated + dustTopNodes(); + + printf("makeChunk: %dms\n", t.stop()); + + updateLiquid(&data->transforming_liquid, full_node_min, full_node_max); + + if (flags & MG_LIGHT) + calcLighting(node_min - v3s16(0, 1, 0), node_max + v3s16(0, 1, 0), + full_node_min, full_node_max); + + //setLighting(node_min - v3s16(1, 0, 1) * MAP_BLOCKSIZE, + // node_max + v3s16(1, 0, 1) * MAP_BLOCKSIZE, 0xFF); + + this->generating = false; +} + + +void MapgenFractal::calculateNoise() +{ + //TimeTaker t("calculateNoise", NULL, PRECISION_MICRO); + int x = node_min.X; + int y = node_min.Y - 1; + int z = node_min.Z; + + noise_seabed->perlinMap2D(x, z); + noise_filler_depth->perlinMap2D(x, z); + + if (flags & MG_CAVES) { + noise_cave1->perlinMap3D(x, y, z); + noise_cave2->perlinMap3D(x, y, z); + } + + noise_heat->perlinMap2D(x, z); + noise_humidity->perlinMap2D(x, z); + noise_heat_blend->perlinMap2D(x, z); + noise_humidity_blend->perlinMap2D(x, z); + + for (s32 i = 0; i < csize.X * csize.Z; i++) { + noise_heat->result[i] += noise_heat_blend->result[i]; + noise_humidity->result[i] += noise_humidity_blend->result[i]; + } + + heatmap = noise_heat->result; + humidmap = noise_humidity->result; + //printf("calculateNoise: %dus\n", t.stop()); +} + + +bool MapgenFractal::getFractalAtPoint(s16 x, s16 y, s16 z) +{ + float cx, cy, cz, cw, ox, oy, oz, ow; + + if (spflags & MGFRACTAL_JULIA) { // Julia set + cx = julia_x; + cy = julia_y; + cz = julia_z; + cw = julia_w; + ox = (float)x / j_scale.X - j_offset.X; + oy = (float)y / j_scale.Y - j_offset.Y; + oz = (float)z / j_scale.Z - j_offset.Z; + ow = j_slice_w; + } else { // Mandelbrot set + cx = (float)x / m_scale.X - m_offset.X; + cy = (float)y / m_scale.Y - m_offset.Y; + cz = (float)z / m_scale.Z - m_offset.Z; + cw = m_slice_w; + ox = 0.0f; + oy = 0.0f; + oz = 0.0f; + ow = 0.0f; + } + + u16 iterations = spflags & MGFRACTAL_JULIA ? j_iterations : m_iterations; + + for (u16 iter = 0; iter < iterations; iter++) { + // 4D "Roundy" Mandelbrot set + float nx = ox * ox - oy * oy - oz * oz - ow * ow + cx; + float ny = 2.0f * (ox * oy + oz * ow) + cy; + float nz = 2.0f * (ox * oz + oy * ow) + cz; + float nw = 2.0f * (ox * ow + oy * oz) + cw; + + if (nx * nx + ny * ny + nz * nz + nw * nw > 4.0f) + return false; + + ox = nx; + oy = ny; + oz = nz; + ow = nw; + } + + return true; +} + + +s16 MapgenFractal::generateTerrain() +{ + MapNode n_air(CONTENT_AIR); + MapNode n_stone(c_stone); + MapNode n_water(c_water_source); + + s16 stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT; + u32 index2d = 0; + + for (s16 z = node_min.Z; z <= node_max.Z; z++) { + for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) { + u32 vi = vm->m_area.index(node_min.X, y, z); + for (s16 x = node_min.X; x <= node_max.X; x++, vi++, index2d++) { + if (vm->m_data[vi].getContent() == CONTENT_IGNORE) { + s16 seabed_height = noise_seabed->result[index2d]; + + if (y <= seabed_height || getFractalAtPoint(x, y, z)) { + vm->m_data[vi] = n_stone; + if (y > stone_surface_max_y) + stone_surface_max_y = y; + } else if (y <= water_level) { + vm->m_data[vi] = n_water; + } else { + vm->m_data[vi] = n_air; + } + } + } + index2d -= ystride; + } + index2d += ystride; + } + + return stone_surface_max_y; +} + + +MgStoneType MapgenFractal::generateBiomes(float *heat_map, float *humidity_map) +{ + v3s16 em = vm->m_area.getExtent(); + u32 index = 0; + MgStoneType stone_type = STONE; + + for (s16 z = node_min.Z; z <= node_max.Z; z++) + for (s16 x = node_min.X; x <= node_max.X; x++, index++) { + Biome *biome = NULL; + u16 depth_top = 0; + u16 base_filler = 0; + u16 depth_water_top = 0; + u32 vi = vm->m_area.index(x, node_max.Y, z); + + // Check node at base of mapchunk above, either a node of a previously + // generated mapchunk or if not, a node of overgenerated base terrain. + content_t c_above = vm->m_data[vi + em.X].getContent(); + bool air_above = c_above == CONTENT_AIR; + bool water_above = c_above == c_water_source; + + // If there is air or water above enable top/filler placement, otherwise force + // nplaced to stone level by setting a number exceeding any possible filler depth. + u16 nplaced = (air_above || water_above) ? 0 : U16_MAX; + + + for (s16 y = node_max.Y; y >= node_min.Y; y--) { + content_t c = vm->m_data[vi].getContent(); + + // Biome is recalculated each time an upper surface is detected while + // working down a column. The selected biome then remains in effect for + // all nodes below until the next surface and biome recalculation. + // Biome is recalculated: + // 1. At the surface of stone below air or water. + // 2. At the surface of water below air. + // 3. When stone or water is detected but biome has not yet been calculated. + if ((c == c_stone && (air_above || water_above || !biome)) || + (c == c_water_source && (air_above || !biome))) { + biome = bmgr->getBiome(heat_map[index], humidity_map[index], y); + depth_top = biome->depth_top; + base_filler = MYMAX(depth_top + biome->depth_filler + + noise_filler_depth->result[index], 0); + depth_water_top = biome->depth_water_top; + + // Detect stone type for dungeons during every biome calculation. + // This is more efficient than detecting per-node and will not + // miss any desert stone or sandstone biomes. + if (biome->c_stone == c_desert_stone) + stone_type = DESERT_STONE; + else if (biome->c_stone == c_sandstone) + stone_type = SANDSTONE; + } + + if (c == c_stone) { + content_t c_below = vm->m_data[vi - em.X].getContent(); + + // If the node below isn't solid, make this node stone, so that + // any top/filler nodes above are structurally supported. + // This is done by aborting the cycle of top/filler placement + // immediately by forcing nplaced to stone level. + if (c_below == CONTENT_AIR || c_below == c_water_source) + nplaced = U16_MAX; + + if (nplaced < depth_top) { + vm->m_data[vi] = MapNode(biome->c_top); + nplaced++; + } else if (nplaced < base_filler) { + vm->m_data[vi] = MapNode(biome->c_filler); + nplaced++; + } else { + vm->m_data[vi] = MapNode(biome->c_stone); + } + + air_above = false; + water_above = false; + } else if (c == c_water_source) { + vm->m_data[vi] = MapNode((y > (s32)(water_level - depth_water_top)) ? + biome->c_water_top : biome->c_water); + nplaced = 0; // Enable top/filler placement for next surface + air_above = false; + water_above = true; + } else if (c == CONTENT_AIR) { + nplaced = 0; // Enable top/filler placement for next surface + air_above = true; + water_above = false; + } else { // Possible various nodes overgenerated from neighbouring mapchunks + nplaced = U16_MAX; // Disable top/filler placement + air_above = false; + water_above = false; + } + + vm->m_area.add_y(em, vi, -1); + } + } + + return stone_type; +} + + +void MapgenFractal::dustTopNodes() +{ + if (node_max.Y < water_level) + return; + + v3s16 em = vm->m_area.getExtent(); + u32 index = 0; + + for (s16 z = node_min.Z; z <= node_max.Z; z++) + for (s16 x = node_min.X; x <= node_max.X; x++, index++) { + Biome *biome = (Biome *)bmgr->getRaw(biomemap[index]); + + if (biome->c_dust == CONTENT_IGNORE) + continue; + + u32 vi = vm->m_area.index(x, full_node_max.Y, z); + content_t c_full_max = vm->m_data[vi].getContent(); + s16 y_start; + + if (c_full_max == CONTENT_AIR) { + y_start = full_node_max.Y - 1; + } else if (c_full_max == CONTENT_IGNORE) { + vi = vm->m_area.index(x, node_max.Y + 1, z); + content_t c_max = vm->m_data[vi].getContent(); + + if (c_max == CONTENT_AIR) + y_start = node_max.Y; + else + continue; + } else { + continue; + } + + vi = vm->m_area.index(x, y_start, z); + for (s16 y = y_start; y >= node_min.Y - 1; y--) { + if (vm->m_data[vi].getContent() != CONTENT_AIR) + break; + + vm->m_area.add_y(em, vi, -1); + } + + content_t c = vm->m_data[vi].getContent(); + if (!ndef->get(c).buildable_to && c != CONTENT_IGNORE && c != biome->c_dust) { + vm->m_area.add_y(em, vi, 1); + vm->m_data[vi] = MapNode(biome->c_dust); + } + } +} + + +void MapgenFractal::generateCaves(s16 max_stone_y) +{ + if (max_stone_y >= node_min.Y) { + u32 index = 0; + + for (s16 z = node_min.Z; z <= node_max.Z; z++) + for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) { + u32 vi = vm->m_area.index(node_min.X, y, z); + for (s16 x = node_min.X; x <= node_max.X; x++, vi++, index++) { + float d1 = contour(noise_cave1->result[index]); + float d2 = contour(noise_cave2->result[index]); + if (d1 * d2 > 0.4f) { + content_t c = vm->m_data[vi].getContent(); + if (!ndef->get(c).is_ground_content || c == CONTENT_AIR) + continue; + + vm->m_data[vi] = MapNode(CONTENT_AIR); + } + } + } + } + + if (node_max.Y > MGFRACTAL_LARGE_CAVE_DEPTH) + return; + + PseudoRandom ps(blockseed + 21343); + u32 bruises_count = (ps.range(1, 4) == 1) ? ps.range(1, 2) : 0; + for (u32 i = 0; i < bruises_count; i++) { + CaveFractal cave(this, &ps); + cave.makeCave(node_min, node_max, max_stone_y); + } +} diff --git a/src/mapgen_fractal.h b/src/mapgen_fractal.h new file mode 100644 index 00000000..23eee9dd --- /dev/null +++ b/src/mapgen_fractal.h @@ -0,0 +1,141 @@ +/* +Minetest +Copyright (C) 2010-2015 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 paramat, Matt Gregory + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 3.0 of the License, or +(at your option) any later version. + +This program 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 Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef MAPGEN_FRACTAL_HEADER +#define MAPGEN_FRACTAL_HEADER + +#include "mapgen.h" + +#define MGFRACTAL_LARGE_CAVE_DEPTH -32 + +/////////////////// Mapgen Fractal flags +#define MGFRACTAL_JULIA 0x01 + +class BiomeManager; + +extern FlagDesc flagdesc_mapgen_fractal[]; + + +struct MapgenFractalParams : public MapgenSpecificParams { + u32 spflags; + + u16 m_iterations; + v3f m_scale; + v3f m_offset; + float m_slice_w; + + u16 j_iterations; + v3f j_scale; + v3f j_offset; + float j_slice_w; + float julia_x; + float julia_y; + float julia_z; + float julia_w; + + NoiseParams np_seabed; + NoiseParams np_filler_depth; + NoiseParams np_cave1; + NoiseParams np_cave2; + + MapgenFractalParams(); + ~MapgenFractalParams() {} + + void readParams(const Settings *settings); + void writeParams(Settings *settings) const; +}; + +class MapgenFractal : public Mapgen { +public: + EmergeManager *m_emerge; + BiomeManager *bmgr; + + int ystride; + int zstride; + u32 spflags; + + v3s16 node_min; + v3s16 node_max; + v3s16 full_node_min; + v3s16 full_node_max; + + u16 m_iterations; + v3f m_scale; + v3f m_offset; + float m_slice_w; + + u16 j_iterations; + v3f j_scale; + v3f j_offset; + float j_slice_w; + float julia_x; + float julia_y; + float julia_z; + float julia_w; + + Noise *noise_seabed; + Noise *noise_filler_depth; + Noise *noise_cave1; + Noise *noise_cave2; + + Noise *noise_heat; + Noise *noise_humidity; + Noise *noise_heat_blend; + Noise *noise_humidity_blend; + + content_t c_stone; + content_t c_water_source; + content_t c_lava_source; + content_t c_desert_stone; + content_t c_ice; + content_t c_sandstone; + + content_t c_cobble; + content_t c_stair_cobble; + content_t c_mossycobble; + content_t c_sandstonebrick; + content_t c_stair_sandstonebrick; + + MapgenFractal(int mapgenid, MapgenParams *params, EmergeManager *emerge); + ~MapgenFractal(); + + virtual void makeChunk(BlockMakeData *data); + int getGroundLevelAtPoint(v2s16 p); + void calculateNoise(); + bool getFractalAtPoint(s16 x, s16 y, s16 z); + s16 generateTerrain(); + MgStoneType generateBiomes(float *heat_map, float *humidity_map); + void dustTopNodes(); + void generateCaves(s16 max_stone_y); +}; + +struct MapgenFactoryFractal : public MapgenFactory { + Mapgen *createMapgen(int mgid, MapgenParams *params, EmergeManager *emerge) + { + return new MapgenFractal(mgid, params, emerge); + }; + + MapgenSpecificParams *createMapgenParams() + { + return new MapgenFractalParams(); + }; +}; + +#endif diff --git a/src/mapgen_singlenode.cpp b/src/mapgen_singlenode.cpp index 45ed26c2..6fdb683c 100644 --- a/src/mapgen_singlenode.cpp +++ b/src/mapgen_singlenode.cpp @@ -1,6 +1,6 @@ /* Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola +Copyright (C) 2010-2015 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -24,7 +24,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "map.h" #include "nodedef.h" #include "voxelalgorithms.h" -#include "profiler.h" #include "emerge.h" diff --git a/src/mapgen_singlenode.h b/src/mapgen_singlenode.h index 12332324..644b9c83 100644 --- a/src/mapgen_singlenode.h +++ b/src/mapgen_singlenode.h @@ -1,6 +1,6 @@ /* Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola +Copyright (C) 2010-2015 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by diff --git a/src/mapgen_v5.cpp b/src/mapgen_v5.cpp index 760bec27..f790197d 100644 --- a/src/mapgen_v5.cpp +++ b/src/mapgen_v5.cpp @@ -1,6 +1,7 @@ /* Minetest -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 paramat, Matt Gregory This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -27,7 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "content_sao.h" #include "nodedef.h" #include "voxelalgorithms.h" -#include "profiler.h" +//#include "profiler.h" // For TimeTaker #include "settings.h" // For g_settings #include "emerge.h" #include "dungeongen.h" @@ -58,6 +59,8 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge) this->biomemap = new u8[csize.X * csize.Z]; this->heightmap = new s16[csize.X * csize.Z]; + this->heatmap = NULL; + this->humidmap = NULL; MapgenV5Params *sp = (MapgenV5Params *)params->sparams; this->spflags = sp->spflags; @@ -68,13 +71,15 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge) noise_height = new Noise(&sp->np_height, seed, csize.X, csize.Z); // 3D terrain noise - noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 2, csize.Z); - noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z); - noise_ground = new Noise(&sp->np_ground, seed, csize.X, csize.Y + 2, csize.Z); + noise_cave1 = new Noise(&sp->np_cave1, seed, csize.X, csize.Y + 2, csize.Z); + noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z); + noise_ground = new Noise(&sp->np_ground, seed, csize.X, csize.Y + 2, csize.Z); // Biome noise - noise_heat = new Noise(¶ms->np_biome_heat, seed, csize.X, csize.Z); - noise_humidity = new Noise(¶ms->np_biome_humidity, seed, csize.X, csize.Z); + noise_heat = new Noise(¶ms->np_biome_heat, seed, csize.X, csize.Z); + noise_humidity = new Noise(¶ms->np_biome_humidity, seed, csize.X, csize.Z); + noise_heat_blend = new Noise(¶ms->np_biome_heat_blend, seed, csize.X, csize.Z); + noise_humidity_blend = new Noise(¶ms->np_biome_humidity_blend, seed, csize.X, csize.Z); //// Resolve nodes to be used INodeDefManager *ndef = emerge->ndef; @@ -116,6 +121,8 @@ MapgenV5::~MapgenV5() delete noise_heat; delete noise_humidity; + delete noise_heat_blend; + delete noise_humidity_blend; delete[] heightmap; delete[] biomemap; @@ -154,7 +161,7 @@ void MapgenV5Params::readParams(const Settings *settings) void MapgenV5Params::writeParams(Settings *settings) const { - settings->setFlagStr("mgv5_spflags", spflags, flagdesc_mapgen_v5, (u32)-1); + settings->setFlagStr("mgv5_spflags", spflags, flagdesc_mapgen_v5, U32_MAX); settings->setNoiseParams("mgv5_np_filler_depth", np_filler_depth); settings->setNoiseParams("mgv5_np_factor", np_factor); @@ -176,23 +183,24 @@ int MapgenV5::getGroundLevelAtPoint(v2s16 p) f *= 1.6; float h = NoisePerlin2D(&noise_height->np, p.X, p.Y, seed); - s16 search_top = water_level + 15; - s16 search_base = water_level; + s16 search_start = 128; // Only bother searching this range, actual + s16 search_end = -128; // ground level is rarely higher or lower. - s16 level = -31000; - for (s16 y = search_top; y >= search_base; y--) { + for (s16 y = search_start; y >= search_end; y--) { float n_ground = NoisePerlin3D(&noise_ground->np, p.X, y, p.Y, seed); + // If solid if (n_ground * f > y - h) { - if (y >= search_top - 7) - break; + // If either top 2 nodes of search are solid this is inside a + // mountain or floatland with no space for the player to spawn. + if (y >= search_start - 1) + return MAX_MAP_GENERATION_LIMIT; else - level = y; - break; + return y; // Ground below at least 2 nodes of space } } //printf("getGroundLevelAtPoint: %dus\n", t.stop()); - return level; + return -MAX_MAP_GENERATION_LIMIT; } @@ -327,12 +335,19 @@ void MapgenV5::calculateNoise() noise_cave2->perlinMap3D(x, y, z); } - if (node_max.Y >= BIOMEGEN_BASE_V5) { - noise_filler_depth->perlinMap2D(x, z); - noise_heat->perlinMap2D(x, z); - noise_humidity->perlinMap2D(x, z); + noise_filler_depth->perlinMap2D(x, z); + noise_heat->perlinMap2D(x, z); + noise_humidity->perlinMap2D(x, z); + noise_heat_blend->perlinMap2D(x, z); + noise_humidity_blend->perlinMap2D(x, z); + + for (s32 i = 0; i < csize.X * csize.Z; i++) { + noise_heat->result[i] += noise_heat_blend->result[i]; + noise_humidity->result[i] += noise_humidity_blend->result[i]; } + heatmap = noise_heat->result; + humidmap = noise_humidity->result; //printf("calculateNoise: %dus\n", t.stop()); } @@ -358,7 +373,7 @@ int MapgenV5::generateBaseTerrain() { u32 index = 0; u32 index2d = 0; - int stone_surface_max_y = -MAP_GENERATION_LIMIT; + int stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT; for (s16 z=node_min.Z; z<=node_max.Z; z++) { for (s16 y=node_min.Y - 1; y<=node_max.Y + 1; y++) { @@ -396,9 +411,6 @@ int MapgenV5::generateBaseTerrain() MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map) { - if (node_max.Y < BIOMEGEN_BASE_V5) - return STONE; - v3s16 em = vm->m_area.getExtent(); u32 index = 0; MgStoneType stone_type = STONE; @@ -415,21 +427,24 @@ MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map) // generated mapchunk or if not, a node of overgenerated base terrain. content_t c_above = vm->m_data[vi + em.X].getContent(); bool air_above = c_above == CONTENT_AIR; + bool water_above = c_above == c_water_source; - // If there is air above enable top/filler placement, otherwise force nplaced to - // stone level by setting a number that will exceed any possible filler depth. - u16 nplaced = (air_above) ? 0 : (u16)-1; + // If there is air or water above enable top/filler placement, otherwise force + // nplaced to stone level by setting a number exceeding any possible filler depth. + u16 nplaced = (air_above || water_above) ? 0 : U16_MAX; for (s16 y = node_max.Y; y >= node_min.Y; y--) { content_t c = vm->m_data[vi].getContent(); - // Biome is only (re)calculated for each stone/water upper surface found - // below air while working downwards. The chosen biome then remains in - // effect for all nodes below until the next biome recalculation. - // Biome is (re)calculated when a stone/water node is either: detected - // below an air node, or, is at column top and might be underground - // or underwater and therefore might not be below air. - if (c != CONTENT_AIR && (y == node_max.Y || air_above)) { + // Biome is recalculated each time an upper surface is detected while + // working down a column. The selected biome then remains in effect for + // all nodes below until the next surface and biome recalculation. + // Biome is recalculated: + // 1. At the surface of stone below air or water. + // 2. At the surface of water below air. + // 3. When stone or water is detected but biome has not yet been calculated. + if ((c == c_stone && (air_above || water_above || !biome)) || + (c == c_water_source && (air_above || !biome))) { biome = bmgr->getBiome(heat_map[index], humidity_map[index], y); depth_top = biome->depth_top; base_filler = MYMAX(depth_top + biome->depth_filler @@ -453,7 +468,7 @@ MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map) // This is done by aborting the cycle of top/filler placement // immediately by forcing nplaced to stone level. if (c_below == CONTENT_AIR || c_below == c_water_source) - nplaced = (u16)-1; + nplaced = U16_MAX; if (nplaced < depth_top) { vm->m_data[vi] = MapNode(biome->c_top); @@ -466,17 +481,21 @@ MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map) } air_above = false; + water_above = false; } else if (c == c_water_source) { vm->m_data[vi] = MapNode((y > (s32)(water_level - depth_water_top)) ? biome->c_water_top : biome->c_water); nplaced = 0; // Enable top/filler placement for next surface - air_above = false; // Biome is not recalculated underwater + air_above = false; + water_above = true; } else if (c == CONTENT_AIR) { nplaced = 0; // Enable top/filler placement for next surface - air_above = true; // Biome will be recalculated at next surface + air_above = true; + water_above = false; } else { // Possible various nodes overgenerated from neighbouring mapchunks - nplaced = (u16)-1; // Disable top/filler placement + nplaced = U16_MAX; // Disable top/filler placement air_above = false; + water_above = false; } vm->m_area.add_y(em, vi, -1); @@ -489,33 +508,27 @@ MgStoneType MapgenV5::generateBiomes(float *heat_map, float *humidity_map) void MapgenV5::generateCaves(int max_stone_y) { - u32 index = 0; - u32 index2d = 0; + if (max_stone_y >= node_min.Y) { + u32 index = 0; - for (s16 z=node_min.Z; z<=node_max.Z; z++) { - for (s16 y=node_min.Y - 1; y<=node_max.Y + 1; y++) { + for (s16 z = node_min.Z; z <= node_max.Z; z++) + for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) { u32 i = vm->m_area.index(node_min.X, y, z); - for (s16 x=node_min.X; x<=node_max.X; x++, i++, index++, index2d++) { + for (s16 x = node_min.X; x <= node_max.X; x++, i++, index++) { float d1 = contour(noise_cave1->result[index]); float d2 = contour(noise_cave2->result[index]); if (d1*d2 > 0.125) { - Biome *biome = (Biome *)bmgr->getRaw(biomemap[index2d]); content_t c = vm->m_data[i].getContent(); - if (!ndef->get(c).is_ground_content || c == CONTENT_AIR || - (y <= water_level && - c != biome->c_stone && - c != c_stone)) + if (!ndef->get(c).is_ground_content || c == CONTENT_AIR) continue; vm->m_data[i] = MapNode(CONTENT_AIR); } } - index2d -= ystride; } - index2d += ystride; } - if (node_max.Y > LARGE_CAVE_DEPTH) + if (node_max.Y > MGV5_LARGE_CAVE_DEPTH) return; PseudoRandom ps(blockseed + 21343); @@ -574,5 +587,4 @@ void MapgenV5::dustTopNodes() vm->m_data[vi] = MapNode(biome->c_dust); } } -} - +} \ No newline at end of file diff --git a/src/mapgen_v5.h b/src/mapgen_v5.h index ae62d97a..f1c93dea 100644 --- a/src/mapgen_v5.h +++ b/src/mapgen_v5.h @@ -1,6 +1,7 @@ /* Minetest -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 paramat, Matt Gregory This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -22,11 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapgen.h" -#define LARGE_CAVE_DEPTH -256 -#define BIOMEGEN_BASE_V5 -192 - -/////////////////// Mapgen V5 flags -//#define MGV5_ 0x01 +#define MGV5_LARGE_CAVE_DEPTH -256 class BiomeManager; @@ -70,8 +67,11 @@ public: Noise *noise_cave1; Noise *noise_cave2; Noise *noise_ground; + Noise *noise_heat; Noise *noise_humidity; + Noise *noise_heat_blend; + Noise *noise_humidity_blend; content_t c_stone; content_t c_water_source; @@ -111,4 +111,4 @@ struct MapgenFactoryV5 : public MapgenFactory { }; }; -#endif +#endif \ No newline at end of file diff --git a/src/mapgen_v6.cpp b/src/mapgen_v6.cpp index 0a0c414a..b9904e10 100644 --- a/src/mapgen_v6.cpp +++ b/src/mapgen_v6.cpp @@ -1,6 +1,6 @@ /* Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola +Copyright (C) 2010-2015 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -26,9 +26,8 @@ with this program; if not, write to the Free Software Foundation, Inc., //#include "serverobject.h" #include "content_sao.h" #include "nodedef.h" -#include "content_mapnode.h" // For content_mapnode_get_new_name #include "voxelalgorithms.h" -#include "profiler.h" +//#include "profiler.h" // For TimeTaker #include "settings.h" // For g_settings #include "emerge.h" #include "dungeongen.h" @@ -108,6 +107,14 @@ MapgenV6::MapgenV6(int mapgenid, MapgenParams *params, EmergeManager *emerge) c_mossycobble = c_cobble; if (c_stair_cobble == CONTENT_IGNORE) c_stair_cobble = c_cobble; + if (c_dirt_with_snow == CONTENT_IGNORE) + c_dirt_with_snow = c_dirt_with_grass; + if (c_snow == CONTENT_IGNORE) + c_snow = CONTENT_AIR; + if (c_snowblock == CONTENT_IGNORE) + c_snowblock = c_dirt_with_grass; + if (c_ice == CONTENT_IGNORE) + c_ice = c_water_source; } @@ -168,7 +175,7 @@ void MapgenV6Params::readParams(const Settings *settings) void MapgenV6Params::writeParams(Settings *settings) const { - settings->setFlagStr("mgv6_spflags", spflags, flagdesc_mapgen_v6, (u32)-1); + settings->setFlagStr("mgv6_spflags", spflags, flagdesc_mapgen_v6, U32_MAX); settings->setFloat("mgv6_freq_desert", freq_desert); settings->setFloat("mgv6_freq_beach", freq_beach); @@ -297,13 +304,13 @@ float MapgenV6::baseTerrainLevelFromMap(int index) s16 MapgenV6::find_ground_level_from_noise(u64 seed, v2s16 p2d, s16 precision) { - return baseTerrainLevelFromNoise(p2d) + AVERAGE_MUD_AMOUNT; + return baseTerrainLevelFromNoise(p2d) + MGV6_AVERAGE_MUD_AMOUNT; } int MapgenV6::getGroundLevelAtPoint(v2s16 p) { - return baseTerrainLevelFromNoise(p) + AVERAGE_MUD_AMOUNT; + return baseTerrainLevelFromNoise(p) + MGV6_AVERAGE_MUD_AMOUNT; } @@ -380,7 +387,7 @@ bool MapgenV6::getHaveAppleTree(v2s16 p) float MapgenV6::getMudAmount(int index) { if (flags & MG_FLAT) - return AVERAGE_MUD_AMOUNT; + return MGV6_AVERAGE_MUD_AMOUNT; /*return ((float)AVERAGE_MUD_AMOUNT + 2.0 * noise2d_perlin( 0.5+(float)p.X/200, 0.5+(float)p.Y/200, @@ -415,13 +422,13 @@ BiomeV6Type MapgenV6::getBiome(int index, v2s16 p) if (spflags & MGV6_SNOWBIOMES) { float blend = (spflags & MGV6_BIOMEBLEND) ? noise2d(p.X, p.Y, seed) / 40 : 0; - if (d > FREQ_HOT + blend) { - if (h > FREQ_JUNGLE + blend) + if (d > MGV6_FREQ_HOT + blend) { + if (h > MGV6_FREQ_JUNGLE + blend) return BT_JUNGLE; else return BT_DESERT; - } else if (d < FREQ_SNOW + blend) { - if (h > FREQ_TAIGA + blend) + } else if (d < MGV6_FREQ_SNOW + blend) { + if (h > MGV6_FREQ_TAIGA + blend) return BT_TAIGA; else return BT_TUNDRA; @@ -619,7 +626,7 @@ int MapgenV6::generateGround() MapNode n_air(CONTENT_AIR), n_water_source(c_water_source); MapNode n_stone(c_stone), n_desert_stone(c_desert_stone); MapNode n_ice(c_ice); - int stone_surface_max_y = -MAP_GENERATION_LIMIT; + int stone_surface_max_y = -MAX_MAP_GENERATION_LIMIT; u32 index = 0; for (s16 z = node_min.Z; z <= node_max.Z; z++) @@ -639,11 +646,11 @@ int MapgenV6::generateGround() for (s16 y = node_min.Y; y <= node_max.Y; y++) { if (vm->m_data[i].getContent() == CONTENT_IGNORE) { if (y <= surface_y) { - vm->m_data[i] = (y >= DESERT_STONE_BASE + vm->m_data[i] = (y >= MGV6_DESERT_STONE_BASE && bt == BT_DESERT) ? n_desert_stone : n_stone; } else if (y <= water_level) { - vm->m_data[i] = (y >= ICE_BASE + vm->m_data[i] = (y >= MGV6_ICE_BASE && bt == BT_TUNDRA) ? n_ice : n_water_source; } else { @@ -1007,7 +1014,7 @@ void MapgenV6::growGrass() // Add surface nodes } else if (bt == BT_TUNDRA) { if (c == c_dirt) { vm->m_data[i] = n_dirt_with_snow; - } else if (c == c_stone) { + } else if (c == c_stone && surface_y < node_max.Y) { vm->m_area.add_y(em, i, 1); vm->m_data[i] = n_snow; } @@ -1044,4 +1051,4 @@ void MapgenV6::generateCaves(int max_stone_y) cave.makeCave(node_min, node_max, max_stone_y); } -} +} \ No newline at end of file diff --git a/src/mapgen_v6.h b/src/mapgen_v6.h index 9845ab77..517b307c 100644 --- a/src/mapgen_v6.h +++ b/src/mapgen_v6.h @@ -1,6 +1,6 @@ /* Minetest -Copyright (C) 2010-2013 celeron55, Perttu Ahola +Copyright (C) 2010-2015 celeron55, Perttu Ahola This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -23,13 +23,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "mapgen.h" #include "noise.h" -#define AVERAGE_MUD_AMOUNT 4 -#define DESERT_STONE_BASE -32 -#define ICE_BASE 0 -#define FREQ_HOT 0.4 -#define FREQ_SNOW -0.4 -#define FREQ_TAIGA 0.5 -#define FREQ_JUNGLE 0.5 +#define MGV6_AVERAGE_MUD_AMOUNT 4 +#define MGV6_DESERT_STONE_BASE -32 +#define MGV6_ICE_BASE 0 +#define MGV6_FREQ_HOT 0.4 +#define MGV6_FREQ_SNOW -0.4 +#define MGV6_FREQ_TAIGA 0.5 +#define MGV6_FREQ_JUNGLE 0.5 //////////// Mapgen V6 flags #define MGV6_JUNGLES 0x01 @@ -173,4 +173,4 @@ struct MapgenFactoryV6 : public MapgenFactory { }; -#endif +#endif \ No newline at end of file diff --git a/src/mapgen_v7.cpp b/src/mapgen_v7.cpp index 79012637..17d01233 100644 --- a/src/mapgen_v7.cpp +++ b/src/mapgen_v7.cpp @@ -1,6 +1,7 @@ /* Minetest -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 paramat, Matt Gregory This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -27,7 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "content_sao.h" #include "nodedef.h" #include "voxelalgorithms.h" -#include "profiler.h" +//#include "profiler.h" // For TimeTaker #include "settings.h" // For g_settings #include "emerge.h" #include "dungeongen.h" @@ -59,8 +60,10 @@ MapgenV7::MapgenV7(int mapgenid, MapgenParams *params, EmergeManager *emerge) this->ystride = csize.X; this->zstride = csize.X * (csize.Y + 2); - this->biomemap = new u8[csize.X * csize.Z]; - this->heightmap = new s16[csize.X * csize.Z]; + this->biomemap = new u8[csize.X * csize.Z]; + this->heightmap = new s16[csize.X * csize.Z]; + this->heatmap = NULL; + this->humidmap = NULL; this->ridge_heightmap = new s16[csize.X * csize.Z]; MapgenV7Params *sp = (MapgenV7Params *)params->sparams; @@ -82,8 +85,10 @@ MapgenV7::MapgenV7(int mapgenid, MapgenParams *params, EmergeManager *emerge) noise_cave2 = new Noise(&sp->np_cave2, seed, csize.X, csize.Y + 2, csize.Z); //// Biome noise - noise_heat = new Noise(¶ms->np_biome_heat, seed, csize.X, csize.Z); - noise_humidity = new Noise(¶ms->np_biome_humidity, seed, csize.X, csize.Z); + noise_heat = new Noise(¶ms->np_biome_heat, seed, csize.X, csize.Z); + noise_humidity = new Noise(¶ms->np_biome_humidity, seed, csize.X, csize.Z); + noise_heat_blend = new Noise(¶ms->np_biome_heat_blend, seed, csize.X, csize.Z); + noise_humidity_blend = new Noise(¶ms->np_biome_humidity_blend, seed, csize.X, csize.Z); //// Resolve nodes to be used INodeDefManager *ndef = emerge->ndef; @@ -130,6 +135,8 @@ MapgenV7::~MapgenV7() delete noise_heat; delete noise_humidity; + delete noise_heat_blend; + delete noise_humidity_blend; delete[] ridge_heightmap; delete[] heightmap; @@ -141,14 +148,14 @@ MapgenV7Params::MapgenV7Params() { spflags = MGV7_MOUNTAINS | MGV7_RIDGES; - np_terrain_base = NoiseParams(4, 70, v3f(600, 600, 600), 82341, 6, 0.7, 2.0); + np_terrain_base = NoiseParams(4, 70, v3f(600, 600, 600), 82341, 5, 0.6, 2.0); np_terrain_alt = NoiseParams(4, 25, v3f(600, 600, 600), 5934, 5, 0.6, 2.0); - np_terrain_persist = NoiseParams(0.6, 0.1, v3f(500, 500, 500), 539, 3, 0.6, 2.0); - np_height_select = NoiseParams(-12, 24, v3f(500, 500, 500), 4213, 6, 0.69, 2.0); - np_filler_depth = NoiseParams(0, 1.2, v3f(150, 150, 150), 261, 4, 0.7, 2.0); - np_mount_height = NoiseParams(184, 72, v3f(500, 500, 500), 72449, 4, 0.6, 2.0); + np_terrain_persist = NoiseParams(0.6, 0.1, v3f(2000, 2000, 2000), 539, 3, 0.6, 2.0); + np_height_select = NoiseParams(-12, 24, v3f(500, 500, 500), 4213, 6, 0.7, 2.0); + np_filler_depth = NoiseParams(0, 1.2, v3f(150, 150, 150), 261, 3, 0.7, 2.0); + np_mount_height = NoiseParams(256, 112, v3f(1000, 1000, 1000), 72449, 3, 0.6, 2.0); np_ridge_uwater = NoiseParams(0, 1, v3f(1000, 1000, 1000), 85039, 5, 0.6, 2.0); - np_mountain = NoiseParams(-0.6, 1, v3f(250, 350, 250), 5333, 5, 0.68, 2.0); + np_mountain = NoiseParams(-0.6, 1, v3f(250, 350, 250), 5333, 5, 0.63, 2.0); np_ridge = NoiseParams(0, 1, v3f(100, 100, 100), 6467, 4, 0.75, 2.0); np_cave1 = NoiseParams(0, 12, v3f(100, 100, 100), 52534, 4, 0.5, 2.0); np_cave2 = NoiseParams(0, 12, v3f(100, 100, 100), 10325, 4, 0.5, 2.0); @@ -175,7 +182,7 @@ void MapgenV7Params::readParams(const Settings *settings) void MapgenV7Params::writeParams(Settings *settings) const { - settings->setFlagStr("mgv7_spflags", spflags, flagdesc_mapgen_v7, (u32)-1); + settings->setFlagStr("mgv7_spflags", spflags, flagdesc_mapgen_v7, U32_MAX); settings->setNoiseParams("mgv7_np_terrain_base", np_terrain_base); settings->setNoiseParams("mgv7_np_terrain_alt", np_terrain_alt); @@ -227,11 +234,11 @@ void MapgenV7::makeChunk(BlockMakeData *data) assert(data->vmanip); assert(data->nodedef); assert(data->blockpos_requested.X >= data->blockpos_min.X && - data->blockpos_requested.Y >= data->blockpos_min.Y && - data->blockpos_requested.Z >= data->blockpos_min.Z); + data->blockpos_requested.Y >= data->blockpos_min.Y && + data->blockpos_requested.Z >= data->blockpos_min.Z); assert(data->blockpos_requested.X <= data->blockpos_max.X && - data->blockpos_requested.Y <= data->blockpos_max.Y && - data->blockpos_requested.Z <= data->blockpos_max.Z); + data->blockpos_requested.Y <= data->blockpos_max.Y && + data->blockpos_requested.Z <= data->blockpos_max.Z); this->generating = true; this->vm = data->vmanip; @@ -357,31 +364,38 @@ void MapgenV7::calculateNoise() noise_ridge_uwater->perlinMap2D(x, z); } - if ((spflags & MGV7_MOUNTAINS) && node_max.Y >= 0) { - noise_mountain->perlinMap3D(x, y, z); - noise_mount_height->perlinMap2D(x, z); + // Mountain noises are calculated in generateMountainTerrain() + + noise_filler_depth->perlinMap2D(x, z); + noise_heat->perlinMap2D(x, z); + noise_humidity->perlinMap2D(x, z); + noise_heat_blend->perlinMap2D(x, z); + noise_humidity_blend->perlinMap2D(x, z); + + for (s32 i = 0; i < csize.X * csize.Z; i++) { + noise_heat->result[i] += noise_heat_blend->result[i]; + noise_humidity->result[i] += noise_humidity_blend->result[i]; } - if (node_max.Y >= BIOMEGEN_BASE_V7) { - noise_filler_depth->perlinMap2D(x, z); - noise_heat->perlinMap2D(x, z); - noise_humidity->perlinMap2D(x, z); - } + heatmap = noise_heat->result; + humidmap = noise_humidity->result; //printf("calculateNoise: %dus\n", t.stop()); } Biome *MapgenV7::getBiomeAtPoint(v3s16 p) { - float heat = NoisePerlin2D(&noise_heat->np, p.X, p.Z, seed); - float humidity = NoisePerlin2D(&noise_humidity->np, p.X, p.Z, seed); + float heat = NoisePerlin2D(&noise_heat->np, p.X, p.Z, seed) + + NoisePerlin2D(&noise_heat_blend->np, p.X, p.Z, seed); + float humidity = NoisePerlin2D(&noise_humidity->np, p.X, p.Z, seed) + + NoisePerlin2D(&noise_humidity_blend->np, p.X, p.Z, seed); s16 groundlevel = baseTerrainLevelAtPoint(p.X, p.Z); return bmgr->getBiome(heat, humidity, groundlevel); } //needs to be updated -float MapgenV7::baseTerrainLevelAtPoint(int x, int z) +float MapgenV7::baseTerrainLevelAtPoint(s16 x, s16 z) { float hselect = NoisePerlin2D(&noise_height_select->np, x, z, seed); hselect = rangelim(hselect, 0.0, 1.0); @@ -414,19 +428,23 @@ float MapgenV7::baseTerrainLevelFromMap(int index) } -bool MapgenV7::getMountainTerrainAtPoint(int x, int y, int z) +bool MapgenV7::getMountainTerrainAtPoint(s16 x, s16 y, s16 z) { float mnt_h_n = NoisePerlin2D(&noise_mount_height->np, x, z, seed); + float density_gradient = -((float)y / mnt_h_n); float mnt_n = NoisePerlin3D(&noise_mountain->np, x, y, z, seed); - return mnt_n * mnt_h_n >= (float)y; + + return mnt_n + density_gradient >= 0.0; } -bool MapgenV7::getMountainTerrainFromMap(int idx_xyz, int idx_xz, int y) +bool MapgenV7::getMountainTerrainFromMap(int idx_xyz, int idx_xz, s16 y) { float mounthn = noise_mount_height->result[idx_xz]; + float density_gradient = -((float)y / mounthn); float mountn = noise_mountain->result[idx_xyz]; - return mountn * mounthn >= (float)y; + + return mountn + density_gradient >= 0.0; } @@ -467,26 +485,30 @@ void MapgenV7::carveRivers() { int MapgenV7::generateTerrain() { - int ymax = generateBaseTerrain(); + s16 stone_surface_min_y; + s16 stone_surface_max_y; - if (spflags & MGV7_MOUNTAINS) - ymax = generateMountainTerrain(ymax); + generateBaseTerrain(&stone_surface_min_y, &stone_surface_max_y); + + if ((spflags & MGV7_MOUNTAINS) && stone_surface_min_y < node_max.Y) + stone_surface_max_y = generateMountainTerrain(stone_surface_max_y); if (spflags & MGV7_RIDGES) generateRidgeTerrain(); - return ymax; + return stone_surface_max_y; } -int MapgenV7::generateBaseTerrain() +void MapgenV7::generateBaseTerrain(s16 *stone_surface_min_y, s16 *stone_surface_max_y) { MapNode n_air(CONTENT_AIR); MapNode n_stone(c_stone); MapNode n_water(c_water_source); - int stone_surface_max_y = -MAP_GENERATION_LIMIT; v3s16 em = vm->m_area.getExtent(); + s16 surface_min_y = MAX_MAP_GENERATION_LIMIT; + s16 surface_max_y = -MAX_MAP_GENERATION_LIMIT; u32 index = 0; for (s16 z = node_min.Z; z <= node_max.Z; z++) @@ -497,8 +519,11 @@ int MapgenV7::generateBaseTerrain() heightmap[index] = surface_y; ridge_heightmap[index] = surface_y; - if (surface_y > stone_surface_max_y) - stone_surface_max_y = surface_y; + if (surface_y < surface_min_y) + surface_min_y = surface_y; + + if (surface_y > surface_max_y) + surface_max_y = surface_y; u32 i = vm->m_area.index(x, node_min.Y - 1, z); for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) { @@ -514,14 +539,15 @@ int MapgenV7::generateBaseTerrain() } } - return stone_surface_max_y; + *stone_surface_min_y = surface_min_y; + *stone_surface_max_y = surface_max_y; } -int MapgenV7::generateMountainTerrain(int ymax) +int MapgenV7::generateMountainTerrain(s16 ymax) { - if (node_max.Y < 0) - return ymax; + noise_mountain->perlinMap3D(node_min.X, node_min.Y - 1, node_min.Z); + noise_mount_height->perlinMap2D(node_min.X, node_min.Z); MapNode n_stone(c_stone); u32 j = 0; @@ -591,9 +617,6 @@ void MapgenV7::generateRidgeTerrain() MgStoneType MapgenV7::generateBiomes(float *heat_map, float *humidity_map) { - if (node_max.Y < BIOMEGEN_BASE_V7) - return STONE; - v3s16 em = vm->m_area.getExtent(); u32 index = 0; MgStoneType stone_type = STONE; @@ -610,21 +633,24 @@ MgStoneType MapgenV7::generateBiomes(float *heat_map, float *humidity_map) // generated mapchunk or if not, a node of overgenerated base terrain. content_t c_above = vm->m_data[vi + em.X].getContent(); bool air_above = c_above == CONTENT_AIR; + bool water_above = c_above == c_water_source; - // If there is air above enable top/filler placement, otherwise force nplaced to - // stone level by setting a number that will exceed any possible filler depth. - u16 nplaced = (air_above) ? 0 : (u16)-1; + // If there is air or water above enable top/filler placement, otherwise force + // nplaced to stone level by setting a number exceeding any possible filler depth. + u16 nplaced = (air_above || water_above) ? 0 : U16_MAX; for (s16 y = node_max.Y; y >= node_min.Y; y--) { content_t c = vm->m_data[vi].getContent(); - // Biome is only (re)calculated for each stone/water upper surface found - // below air while working downwards. The chosen biome then remains in - // effect for all nodes below until the next biome recalculation. - // Biome is (re)calculated when a stone/water node is either: detected - // below an air node, or, is at column top and might be underground - // or underwater and therefore might not be below air. - if (c != CONTENT_AIR && (y == node_max.Y || air_above)) { + // Biome is recalculated each time an upper surface is detected while + // working down a column. The selected biome then remains in effect for + // all nodes below until the next surface and biome recalculation. + // Biome is recalculated: + // 1. At the surface of stone below air or water. + // 2. At the surface of water below air. + // 3. When stone or water is detected but biome has not yet been calculated. + if ((c == c_stone && (air_above || water_above || !biome)) || + (c == c_water_source && (air_above || !biome))) { biome = bmgr->getBiome(heat_map[index], humidity_map[index], y); depth_top = biome->depth_top; base_filler = MYMAX(depth_top + biome->depth_filler @@ -648,7 +674,7 @@ MgStoneType MapgenV7::generateBiomes(float *heat_map, float *humidity_map) // This is done by aborting the cycle of top/filler placement // immediately by forcing nplaced to stone level. if (c_below == CONTENT_AIR || c_below == c_water_source) - nplaced = (u16)-1; + nplaced = U16_MAX; if (nplaced < depth_top) { vm->m_data[vi] = MapNode(biome->c_top); @@ -661,17 +687,21 @@ MgStoneType MapgenV7::generateBiomes(float *heat_map, float *humidity_map) } air_above = false; + water_above = false; } else if (c == c_water_source) { vm->m_data[vi] = MapNode((y > (s32)(water_level - depth_water_top)) ? biome->c_water_top : biome->c_water); nplaced = 0; // Enable top/filler placement for next surface - air_above = false; // Biome is not recalculated underwater + air_above = false; + water_above = true; } else if (c == CONTENT_AIR) { nplaced = 0; // Enable top/filler placement for next surface - air_above = true; // Biome will be recalculated at next surface + air_above = true; + water_above = false; } else { // Possible various nodes overgenerated from neighbouring mapchunks - nplaced = (u16)-1; // Disable top/filler placement + nplaced = U16_MAX; // Disable top/filler placement air_above = false; + water_above = false; } vm->m_area.add_y(em, vi, -1); @@ -828,36 +858,25 @@ void MapgenV7::addTopNodes() #endif -void MapgenV7::generateCaves(int max_stone_y) +void MapgenV7::generateCaves(s16 max_stone_y) { if (max_stone_y >= node_min.Y) { u32 index = 0; - u32 index2d = 0; - for (s16 z = node_min.Z; z <= node_max.Z; z++) { - for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) { - u32 i = vm->m_area.index(node_min.X, y, z); - for (s16 x = node_min.X; x <= node_max.X; - x++, i++, index++, index2d++) { - float d1 = contour(noise_cave1->result[index]); - float d2 = contour(noise_cave2->result[index]); - if (d1 * d2 > 0.3) { - Biome *biome = (Biome *)bmgr-> - getRaw(biomemap[index2d]); - content_t c = vm->m_data[i].getContent(); - if (!ndef->get(c).is_ground_content || - c == CONTENT_AIR || - (y <= water_level && - c != biome->c_stone && - c != c_stone)) - continue; + for (s16 z = node_min.Z; z <= node_max.Z; z++) + for (s16 y = node_min.Y - 1; y <= node_max.Y + 1; y++) { + u32 i = vm->m_area.index(node_min.X, y, z); + for (s16 x = node_min.X; x <= node_max.X; x++, i++, index++) { + float d1 = contour(noise_cave1->result[index]); + float d2 = contour(noise_cave2->result[index]); + if (d1 * d2 > 0.3) { + content_t c = vm->m_data[i].getContent(); + if (!ndef->get(c).is_ground_content || c == CONTENT_AIR) + continue; - vm->m_data[i] = MapNode(CONTENT_AIR); - } + vm->m_data[i] = MapNode(CONTENT_AIR); } - index2d -= ystride; } - index2d += ystride; } } @@ -867,5 +886,4 @@ void MapgenV7::generateCaves(int max_stone_y) CaveV7 cave(this, &ps); cave.makeCave(node_min, node_max, max_stone_y); } -} - +} \ No newline at end of file diff --git a/src/mapgen_v7.h b/src/mapgen_v7.h index 4d32d0ad..92d2d7c7 100644 --- a/src/mapgen_v7.h +++ b/src/mapgen_v7.h @@ -1,6 +1,7 @@ /* Minetest -Copyright (C) 2010-2013 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 kwolekr, Ryan Kwolek +Copyright (C) 2010-2015 paramat, Matt Gregory This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -84,6 +85,8 @@ public: Noise *noise_heat; Noise *noise_humidity; + Noise *noise_heat_blend; + Noise *noise_humidity_blend; content_t c_stone; content_t c_water_source; @@ -105,16 +108,16 @@ public: int getGroundLevelAtPoint(v2s16 p); Biome *getBiomeAtPoint(v3s16 p); - float baseTerrainLevelAtPoint(int x, int z); + float baseTerrainLevelAtPoint(s16 x, s16 z); float baseTerrainLevelFromMap(int index); - bool getMountainTerrainAtPoint(int x, int y, int z); - bool getMountainTerrainFromMap(int idx_xyz, int idx_xz, int y); + bool getMountainTerrainAtPoint(s16 x, s16 y, s16 z); + bool getMountainTerrainFromMap(int idx_xyz, int idx_xz, s16 y); void calculateNoise(); virtual int generateTerrain(); - int generateBaseTerrain(); - int generateMountainTerrain(int ymax); + void generateBaseTerrain(s16 *stone_surface_min_y, s16 *stone_surface_max_y); + int generateMountainTerrain(s16 ymax); void generateRidgeTerrain(); MgStoneType generateBiomes(float *heat_map, float *humidity_map); @@ -122,7 +125,7 @@ public: //void addTopNodes(); - void generateCaves(int max_stone_y); + void generateCaves(s16 max_stone_y); }; struct MapgenFactoryV7 : public MapgenFactory { diff --git a/src/mapnode.cpp b/src/mapnode.cpp index c49fe7d8..74bb0377 100644 --- a/src/mapnode.cpp +++ b/src/mapnode.cpp @@ -159,16 +159,50 @@ v3s16 MapNode::getWallMountedDir(INodeDefManager *nodemgr) const } } -void MapNode::rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot) { +void MapNode::rotateAlongYAxis(INodeDefManager *nodemgr, Rotation rot) +{ ContentParamType2 cpt2 = nodemgr->get(*this).param_type_2; if (cpt2 == CPT2_FACEDIR) { - if (param2 >= 4) - return; + static const u8 rotate_facedir[24 * 4] = { + // Table value = rotated facedir + // Columns: 0, 90, 180, 270 degrees rotation around vertical axis + // Rotation is anticlockwise as seen from above (+Y) - u8 newrot = param2 & 3; - param2 &= ~3; - param2 |= (newrot + rot) & 3; + 0, 1, 2, 3, // Initial facedir 0 to 3 + 1, 2, 3, 0, + 2, 3, 0, 1, + 3, 0, 1, 2, + + 4, 13, 10, 19, // 4 to 7 + 5, 14, 11, 16, + 6, 15, 8, 17, + 7, 12, 9, 18, + + 8, 17, 6, 15, // 8 to 11 + 9, 18, 7, 12, + 10, 19, 4, 13, + 11, 16, 5, 14, + + 12, 9, 18, 7, // 12 to 15 + 13, 10, 19, 4, + 14, 11, 16, 5, + 15, 8, 17, 6, + + 16, 5, 14, 11, // 16 to 19 + 17, 6, 15, 8, + 18, 7, 12, 9, + 19, 4, 13, 10, + + 20, 23, 22, 21, // 20 to 23 + 21, 20, 23, 22, + 22, 21, 20, 23, + 23, 22, 21, 20 + }; + u8 facedir = (param2 & 31) % 24; + u8 index = facedir * 4 + rot; + param2 &= ~31; + param2 |= rotate_facedir[index]; } else if (cpt2 == CPT2_WALLMOUNTED) { u8 wmountface = (param2 & 7); if (wmountface <= 1) @@ -192,7 +226,7 @@ static std::vector transformNodeBox(const MapNode &n, facedir&=0x03; for(std::vector::const_iterator i = fixed.begin(); - i != fixed.end(); i++) + i != fixed.end(); ++i) { aabb3f box = *i; @@ -668,4 +702,4 @@ void MapNode::deSerialize_pre22(u8 *source, u8 version) // Translate to our known version *this = mapnode_translate_to_internal(*this, version); -} +} \ No newline at end of file diff --git a/src/mapsector.cpp b/src/mapsector.cpp index dc0d7556..3dda3eec 100644 --- a/src/mapsector.cpp +++ b/src/mapsector.cpp @@ -59,7 +59,7 @@ MapBlock * MapSector::getBlockBuffered(s16 y) if(m_block_cache != NULL && y == m_block_cache_y){ return m_block_cache; } - + // If block doesn't exist, return NULL std::map::iterator n = m_blocks.find(y); if(n == m_blocks.end()) @@ -70,11 +70,11 @@ MapBlock * MapSector::getBlockBuffered(s16 y) else{ block = n->second; } - + // Cache the last result m_block_cache_y = y; m_block_cache = block; - + return block; } @@ -88,16 +88,16 @@ MapBlock * MapSector::createBlankBlockNoInsert(s16 y) assert(getBlockBuffered(y) == NULL); // Pre-condition v3s16 blockpos_map(m_pos.X, y, m_pos.Y); - + MapBlock *block = new MapBlock(m_parent, blockpos_map, m_gamedef); - + return block; } MapBlock * MapSector::createBlankBlock(s16 y) { MapBlock *block = createBlankBlockNoInsert(y); - + m_blocks[y] = block; return block; @@ -114,7 +114,7 @@ void MapSector::insertBlock(MapBlock *block) v2s16 p2d(block->getPos().X, block->getPos().Z); assert(p2d == m_pos); - + // Insert into container m_blocks[block_y] = block; } @@ -125,7 +125,7 @@ void MapSector::deleteBlock(MapBlock *block) // Clear from cache m_block_cache = NULL; - + // Remove from container m_blocks.erase(block_y); @@ -142,6 +142,11 @@ void MapSector::getBlocks(MapBlockVect &dest) } } +bool MapSector::empty() +{ + return m_blocks.empty(); +} + /* ServerMapSector */ @@ -159,18 +164,18 @@ void ServerMapSector::serialize(std::ostream &os, u8 version) { if(!ser_ver_supported(version)) throw VersionMismatchException("ERROR: MapSector format not supported"); - + /* [0] u8 serialization version + heightmap data */ - + // Server has both of these, no need to support not having them. //assert(m_objects != NULL); // Write version os.write((char*)&version, 1); - + /* Add stuff here, if needed */ @@ -193,18 +198,18 @@ ServerMapSector* ServerMapSector::deSerialize( /* Read stuff */ - + // Read version u8 version = SER_FMT_VER_INVALID; is.read((char*)&version, 1); - + if(!ser_ver_supported(version)) throw VersionMismatchException("ERROR: MapSector format not supported"); - + /* Add necessary reading stuff here */ - + /* Get or create sector */ @@ -215,7 +220,7 @@ ServerMapSector* ServerMapSector::deSerialize( if(n != sectors.end()) { - dstream<<"WARNING: deSerializing existent sectors not supported " + warningstream<<"deSerializing existent sectors not supported " "at the moment, because code hasn't been tested." < m_blocks; @@ -76,12 +78,12 @@ protected: v2s16 m_pos; IGameDef *m_gamedef; - + // Last-used block is cached here for quicker access. - // Be sure to set this to NULL when the cached block is deleted + // Be sure to set this to NULL when the cached block is deleted MapBlock *m_block_cache; s16 m_block_cache_y; - + /* Private methods */ @@ -94,7 +96,7 @@ class ServerMapSector : public MapSector public: ServerMapSector(Map *parent, v2s16 pos, IGameDef *gamedef); ~ServerMapSector(); - + u32 getId() const { return MAPSECTOR_SERVER; @@ -106,7 +108,7 @@ public: */ void serialize(std::ostream &os, u8 version); - + static ServerMapSector* deSerialize( std::istream &is, Map *parent, @@ -114,7 +116,7 @@ public: std::map & sectors, IGameDef *gamedef ); - + private: }; @@ -124,7 +126,7 @@ class ClientMapSector : public MapSector public: ClientMapSector(Map *parent, v2s16 pos, IGameDef *gamedef); ~ClientMapSector(); - + u32 getId() const { return MAPSECTOR_CLIENT; @@ -133,6 +135,6 @@ public: private: }; #endif - + #endif diff --git a/src/mesh.cpp b/src/mesh.cpp index 77a63e19..5ba1090f 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -33,6 +33,13 @@ with this program; if not, write to the Free Software Foundation, Inc., #define MY_ETLM_READ_ONLY video::ETLM_READ_ONLY #endif +static void applyFacesShading(video::SColor& color, float factor) +{ + color.setRed(core::clamp(core::round32(color.getRed()*factor), 0, 255)); + color.setGreen(core::clamp(core::round32(color.getGreen()*factor), 0, 255)); + color.setBlue(core::clamp(core::round32(color.getBlue()*factor), 0, 255)); +} + scene::IAnimatedMesh* createCubeMesh(v3f scale) { video::SColor c(255,255,255,255); @@ -94,26 +101,25 @@ scene::IAnimatedMesh* createCubeMesh(v3f scale) void scaleMesh(scene::IMesh *mesh, v3f scale) { - if(mesh == NULL) + if (mesh == NULL) return; core::aabbox3d bbox; - bbox.reset(0,0,0); + bbox.reset(0, 0, 0); - u16 mc = mesh->getMeshBufferCount(); - for(u16 j=0; jgetMeshBufferCount(); + for (u32 j = 0; j < mc; j++) { scene::IMeshBuffer *buf = mesh->getMeshBuffer(j); - video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices(); - u16 vc = buf->getVertexCount(); - for(u16 i=0; igetVertexType()); + u32 vertex_count = buf->getVertexCount(); + u8 *vertices = (u8 *)buf->getVertices(); + for (u32 i = 0; i < vertex_count; i++) + ((video::S3DVertex *)(vertices + i * stride))->Pos *= scale; + buf->recalculateBoundingBox(); // calculate total bounding box - if(j == 0) + if (j == 0) bbox = buf->getBoundingBox(); else bbox.addInternalBox(buf->getBoundingBox()); @@ -123,26 +129,25 @@ void scaleMesh(scene::IMesh *mesh, v3f scale) void translateMesh(scene::IMesh *mesh, v3f vec) { - if(mesh == NULL) + if (mesh == NULL) return; core::aabbox3d bbox; - bbox.reset(0,0,0); + bbox.reset(0, 0, 0); - u16 mc = mesh->getMeshBufferCount(); - for(u16 j=0; jgetMeshBufferCount(); + for (u32 j = 0; j < mc; j++) { scene::IMeshBuffer *buf = mesh->getMeshBuffer(j); - video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices(); - u16 vc = buf->getVertexCount(); - for(u16 i=0; igetVertexType()); + u32 vertex_count = buf->getVertexCount(); + u8 *vertices = (u8 *)buf->getVertices(); + for (u32 i = 0; i < vertex_count; i++) + ((video::S3DVertex *)(vertices + i * stride))->Pos += vec; + buf->recalculateBoundingBox(); // calculate total bounding box - if(j == 0) + if (j == 0) bbox = buf->getBoundingBox(); else bbox.addInternalBox(buf->getBoundingBox()); @@ -150,20 +155,48 @@ void translateMesh(scene::IMesh *mesh, v3f vec) mesh->setBoundingBox(bbox); } + void setMeshColor(scene::IMesh *mesh, const video::SColor &color) { - if(mesh == NULL) + if (mesh == NULL) return; - - u16 mc = mesh->getMeshBufferCount(); - for(u16 j=0; jgetMeshBufferCount(); + for (u32 j = 0; j < mc; j++) { scene::IMeshBuffer *buf = mesh->getMeshBuffer(j); - video::S3DVertex *vertices = (video::S3DVertex*)buf->getVertices(); - u16 vc = buf->getVertexCount(); - for(u16 i=0; igetVertexType()); + u32 vertex_count = buf->getVertexCount(); + u8 *vertices = (u8 *)buf->getVertices(); + for (u32 i = 0; i < vertex_count; i++) + ((video::S3DVertex *)(vertices + i * stride))->Color = color; + } +} + +void shadeMeshFaces(scene::IMesh *mesh) +{ + if (mesh == NULL) + return; + + u32 mc = mesh->getMeshBufferCount(); + for (u32 j = 0; j < mc; j++) { + scene::IMeshBuffer *buf = mesh->getMeshBuffer(j); + const u32 stride = getVertexPitchFromType(buf->getVertexType()); + u32 vertex_count = buf->getVertexCount(); + u8 *vertices = (u8 *)buf->getVertices(); + for (u32 i = 0; i < vertex_count; i++) { + video::S3DVertex *vertex = (video::S3DVertex *)(vertices + i * stride); + video::SColor &vc = vertex->Color; + if (vertex->Normal.Y < -0.5) { + applyFacesShading (vc, 0.447213); + } else if (vertex->Normal.Z > 0.5) { + applyFacesShading (vc, 0.670820); + } else if (vertex->Normal.Z < -0.5) { + applyFacesShading (vc, 0.670820); + } else if (vertex->Normal.X > 0.5) { + applyFacesShading (vc, 0.836660); + } else if (vertex->Normal.X < -0.5) { + applyFacesShading (vc, 0.836660); + } } } } @@ -369,7 +402,7 @@ scene::IMesh* convertNodeboxNodeToMesh(ContentFeatures *f) for(std::vector::iterator i = boxes.begin(); - i != boxes.end(); i++) + i != boxes.end(); ++i) { aabb3f box = *i; diff --git a/src/mesh.h b/src/mesh.h index a1c80f98..7cb5c24e 100644 --- a/src/mesh.h +++ b/src/mesh.h @@ -48,6 +48,12 @@ void translateMesh(scene::IMesh *mesh, v3f vec); */ void setMeshColor(scene::IMesh *mesh, const video::SColor &color); +/* + Shade mesh faces according to their normals +*/ + +void shadeMeshFaces(scene::IMesh *mesh); + /* Set the color of all vertices in the mesh. For each vertex, determine the largest absolute entry in diff --git a/src/mg_biome.cpp b/src/mg_biome.cpp index 8dee396a..c045c613 100644 --- a/src/mg_biome.cpp +++ b/src/mg_biome.cpp @@ -43,15 +43,15 @@ BiomeManager::BiomeManager(IGameDef *gamedef) : b->name = "Default"; b->flags = 0; b->depth_top = 0; - b->depth_filler = 0; + b->depth_filler = -MAX_MAP_GENERATION_LIMIT; b->depth_water_top = 0; - b->y_min = -MAP_GENERATION_LIMIT; - b->y_max = MAP_GENERATION_LIMIT; + b->y_min = -MAX_MAP_GENERATION_LIMIT; + b->y_max = MAX_MAP_GENERATION_LIMIT; b->heat_point = 0.0; b->humidity_point = 0.0; - b->m_nodenames.push_back("air"); - b->m_nodenames.push_back("air"); + b->m_nodenames.push_back("mapgen_stone"); + b->m_nodenames.push_back("mapgen_stone"); b->m_nodenames.push_back("mapgen_stone"); b->m_nodenames.push_back("mapgen_water_source"); b->m_nodenames.push_back("mapgen_water_source"); @@ -132,12 +132,11 @@ void BiomeManager::clear() void Biome::resolveNodeNames() { - getIdFromNrBacklog(&c_top, "mapgen_dirt_with_grass", CONTENT_AIR); - getIdFromNrBacklog(&c_filler, "mapgen_dirt", CONTENT_AIR); + getIdFromNrBacklog(&c_top, "mapgen_stone", CONTENT_AIR); + getIdFromNrBacklog(&c_filler, "mapgen_stone", CONTENT_AIR); getIdFromNrBacklog(&c_stone, "mapgen_stone", CONTENT_AIR); getIdFromNrBacklog(&c_water_top, "mapgen_water_source", CONTENT_AIR); getIdFromNrBacklog(&c_water, "mapgen_water_source", CONTENT_AIR); getIdFromNrBacklog(&c_river_water, "mapgen_river_water_source", CONTENT_AIR); getIdFromNrBacklog(&c_dust, "air", CONTENT_IGNORE); } - diff --git a/src/mg_decoration.cpp b/src/mg_decoration.cpp index 8f20a134..2f2e8fb5 100644 --- a/src/mg_decoration.cpp +++ b/src/mg_decoration.cpp @@ -30,6 +30,7 @@ FlagDesc flagdesc_deco[] = { {"place_center_y", DECO_PLACE_CENTER_Y}, {"place_center_z", DECO_PLACE_CENTER_Z}, {"force_placement", DECO_FORCE_PLACEMENT}, + {"liquid_surface", DECO_LIQUID_SURFACE}, {NULL, 0} }; @@ -90,11 +91,9 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax) int carea_size = nmax.X - nmin.X + 1; // Divide area into parts - if (carea_size % sidelen) { - errorstream << "Decoration::placeDeco: chunk size is not divisible by " - "sidelen; setting sidelen to " << carea_size << std::endl; + // If chunksize is changed it may no longer be divisable by sidelen + if (carea_size % sidelen) sidelen = carea_size; - } s16 divlen = carea_size / sidelen; int area = sidelen * sidelen; @@ -126,10 +125,13 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax) int mapindex = carea_size * (z - nmin.Z) + (x - nmin.X); - s16 y = mg->heightmap ? - mg->heightmap[mapindex] : - mg->findGroundLevel(v2s16(x, z), nmin.Y, nmax.Y); - y = MYMAX(y, mg->water_level); + s16 y = -MAX_MAP_GENERATION_LIMIT; + if (flags & DECO_LIQUID_SURFACE) + y = mg->findLiquidSurface(v2s16(x, z), nmin.Y, nmax.Y); + else if (mg->heightmap) + y = mg->heightmap[mapindex]; + else + y = mg->findGroundLevel(v2s16(x, z), nmin.Y, nmax.Y); if (y < nmin.Y || y > nmax.Y || y < y_min || y > y_max) @@ -140,7 +142,7 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax) #if 0 printf("Decoration at (%d %d %d) cut off\n", x, y, z); //add to queue - JMutexAutoLock cutofflock(cutoff_mutex); + MutexAutoLock cutofflock(cutoff_mutex); cutoffs.push_back(CutoffData(x, y, z, height)); #endif } @@ -173,7 +175,7 @@ void Decoration::placeCutoffs(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax) // Copy over the cutoffs we're interested in so we don't needlessly hold a lock { - JMutexAutoLock cutofflock(cutoff_mutex); + MutexAutoLock cutofflock(cutoff_mutex); for (std::list::iterator i = cutoffs.begin(); i != cutoffs.end(); ++i) { CutoffData cutoff = *i; @@ -204,7 +206,7 @@ void Decoration::placeCutoffs(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax) // Remove cutoffs that were handled from the cutoff list { - JMutexAutoLock cutofflock(cutoff_mutex); + MutexAutoLock cutofflock(cutoff_mutex); for (std::list::iterator i = cutoffs.begin(); i != cutoffs.end(); ++i) { @@ -247,7 +249,7 @@ bool DecoSimple::canPlaceDecoration(MMVManip *vm, v3s16 p) return true; int nneighs = 0; - v3s16 dirs[8] = { + v3s16 dirs[16] = { v3s16( 0, 0, 1), v3s16( 0, 0, -1), v3s16( 1, 0, 0), @@ -255,7 +257,16 @@ bool DecoSimple::canPlaceDecoration(MMVManip *vm, v3s16 p) v3s16( 1, 0, 1), v3s16(-1, 0, 1), v3s16(-1, 0, -1), - v3s16( 1, 0, -1) + v3s16( 1, 0, -1), + + v3s16( 0, 1, 1), + v3s16( 0, 1, -1), + v3s16( 1, 1, 0), + v3s16(-1, 1, 0), + v3s16( 1, 1, 1), + v3s16(-1, 1, 1), + v3s16(-1, 1, -1), + v3s16( 1, 1, -1) }; // Check a Moore neighborhood if there are enough spawnby nodes diff --git a/src/mg_decoration.h b/src/mg_decoration.h index 7e34104e..d95527d9 100644 --- a/src/mg_decoration.h +++ b/src/mg_decoration.h @@ -41,6 +41,7 @@ enum DecorationType { #define DECO_PLACE_CENTER_Z 0x04 #define DECO_USE_NOISE 0x08 #define DECO_FORCE_PLACEMENT 0x10 +#define DECO_LIQUID_SURFACE 0x20 extern FlagDesc flagdesc_deco[]; @@ -84,7 +85,7 @@ public: std::set biomes; //std::list cutoffs; - //JMutex cutoff_mutex; + //Mutex cutoff_mutex; }; class DecoSimple : public Decoration { diff --git a/src/mg_ore.cpp b/src/mg_ore.cpp index c5a99b89..6f2ff620 100644 --- a/src/mg_ore.cpp +++ b/src/mg_ore.cpp @@ -25,8 +25,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" FlagDesc flagdesc_ore[] = { - {"absheight", OREFLAG_ABSHEIGHT}, - {NULL, 0} + {"absheight", OREFLAG_ABSHEIGHT}, + {"puff_cliffs", OREFLAG_PUFF_CLIFFS}, + {"puff_additive_composition", OREFLAG_PUFF_ADDITIVE}, + {NULL, 0} }; @@ -132,7 +134,7 @@ void OreScatter::generate(MMVManip *vm, int mapseed, u32 blockseed, (nmax.Y - nmin.Y + 1) * (nmax.Z - nmin.Z + 1); u32 csize = clust_size; - u32 orechance = (csize * csize * csize) / clust_num_ores; + u32 cvolume = csize * csize * csize; u32 nclusters = volume / clust_scarcity; for (u32 i = 0; i != nclusters; i++) { @@ -154,7 +156,7 @@ void OreScatter::generate(MMVManip *vm, int mapseed, u32 blockseed, for (u32 z1 = 0; z1 != csize; z1++) for (u32 y1 = 0; y1 != csize; y1++) for (u32 x1 = 0; x1 != csize; x1++) { - if (pr.range(1, orechance) != 1) + if (pr.range(1, cvolume) > clust_num_ores) continue; u32 i = vm->m_area.index(x0 + x1, y0 + y1, z0 + z1); @@ -176,8 +178,8 @@ void OreSheet::generate(MMVManip *vm, int mapseed, u32 blockseed, PseudoRandom pr(blockseed + 4234); MapNode n_ore(c_ore, 0, ore_param2); - int max_height = clust_size; - int y_start = pr.range(nmin.Y, nmax.Y - max_height); + u16 max_height = column_height_max; + int y_start = pr.range(nmin.Y + max_height, nmax.Y - max_height); if (!noise) { int sx = nmax.X - nmin.X + 1; @@ -200,10 +202,12 @@ void OreSheet::generate(MMVManip *vm, int mapseed, u32 blockseed, continue; } - int height = max_height * (1. / pr.range(1, 3)); - int y0 = y_start + np.scale * noiseval; //pr.range(1, 3) - 1; + u16 height = pr.range(column_height_min, column_height_max); + int ymidpoint = y_start + noiseval; + int y0 = ymidpoint - height * (1 - column_midpoint_factor); int y1 = y0 + height; - for (int y = y0; y != y1; y++) { + + for (int y = y0; y < y1; y++) { u32 i = vm->m_area.index(x, y, z); if (!vm->m_area.contains(i)) continue; @@ -218,6 +222,94 @@ void OreSheet::generate(MMVManip *vm, int mapseed, u32 blockseed, /////////////////////////////////////////////////////////////////////////////// +OrePuff::OrePuff() : + Ore() +{ + noise_puff_top = NULL; + noise_puff_bottom = NULL; +} + + +OrePuff::~OrePuff() +{ + delete noise_puff_top; + delete noise_puff_bottom; +} + + +void OrePuff::generate(MMVManip *vm, int mapseed, u32 blockseed, + v3s16 nmin, v3s16 nmax, u8 *biomemap) +{ + PseudoRandom pr(blockseed + 4234); + MapNode n_ore(c_ore, 0, ore_param2); + + int y_start = pr.range(nmin.Y, nmax.Y); + + if (!noise) { + int sx = nmax.X - nmin.X + 1; + int sz = nmax.Z - nmin.Z + 1; + noise = new Noise(&np, 0, sx, sz); + noise_puff_top = new Noise(&np_puff_top, 0, sx, sz); + noise_puff_bottom = new Noise(&np_puff_bottom, 0, sx, sz); + } + + noise->seed = mapseed + y_start; + noise->perlinMap2D(nmin.X, nmin.Z); + bool noise_generated = false; + + size_t index = 0; + for (int z = nmin.Z; z <= nmax.Z; z++) + for (int x = nmin.X; x <= nmax.X; x++, index++) { + float noiseval = noise->result[index]; + if (noiseval < nthresh) + continue; + + if (biomemap && !biomes.empty()) { + std::set::iterator it = biomes.find(biomemap[index]); + if (it == biomes.end()) + continue; + } + + if (!noise_generated) { + noise_generated = true; + noise_puff_top->perlinMap2D(nmin.X, nmin.Z); + noise_puff_bottom->perlinMap2D(nmin.X, nmin.Z); + } + + float ntop = noise_puff_top->result[index]; + float nbottom = noise_puff_bottom->result[index]; + + if (!(flags & OREFLAG_PUFF_CLIFFS)) { + float ndiff = noiseval - nthresh; + if (ndiff < 1.0f) { + ntop *= ndiff; + nbottom *= ndiff; + } + } + + int ymid = y_start; + int y0 = ymid - nbottom; + int y1 = ymid + ntop; + + if ((flags & OREFLAG_PUFF_ADDITIVE) && (y0 > y1)) + SWAP(int, y0, y1); + + for (int y = y0; y <= y1; y++) { + u32 i = vm->m_area.index(x, y, z); + if (!vm->m_area.contains(i)) + continue; + if (!CONTAINS(c_wherein, vm->m_data[i].getContent())) + continue; + + vm->m_data[i] = n_ore; + } + } +} + + +/////////////////////////////////////////////////////////////////////////////// + + void OreBlob::generate(MMVManip *vm, int mapseed, u32 blockseed, v3s16 nmin, v3s16 nmax, u8 *biomemap) { @@ -266,9 +358,9 @@ void OreBlob::generate(MMVManip *vm, int mapseed, u32 blockseed, float noiseval = noise->result[index]; - float xdist = x1 - csize / 2; - float ydist = y1 - csize / 2; - float zdist = z1 - csize / 2; + float xdist = (s32)x1 - (s32)csize / 2; + float ydist = (s32)y1 - (s32)csize / 2; + float zdist = (s32)z1 - (s32)csize / 2; noiseval -= (sqrt(xdist * xdist + ydist * ydist + zdist * zdist) / csize); @@ -283,7 +375,8 @@ void OreBlob::generate(MMVManip *vm, int mapseed, u32 blockseed, /////////////////////////////////////////////////////////////////////////////// -OreVein::OreVein() +OreVein::OreVein() : + Ore() { noise2 = NULL; } diff --git a/src/mg_ore.h b/src/mg_ore.h index ae72ce30..ff8387dc 100644 --- a/src/mg_ore.h +++ b/src/mg_ore.h @@ -30,17 +30,18 @@ class MMVManip; /////////////////// Ore generation flags -// Use absolute value of height to determine ore placement -#define OREFLAG_ABSHEIGHT 0x01 -#define OREFLAG_USE_NOISE 0x08 +#define OREFLAG_ABSHEIGHT 0x01 +#define OREFLAG_PUFF_CLIFFS 0x02 +#define OREFLAG_PUFF_ADDITIVE 0x04 +#define OREFLAG_USE_NOISE 0x08 #define ORE_RANGE_ACTUAL 1 #define ORE_RANGE_MIRROR 2 - enum OreType { ORE_SCATTER, ORE_SHEET, + ORE_PUFF, ORE_BLOB, ORE_VEIN, }; @@ -87,6 +88,26 @@ class OreSheet : public Ore { public: static const bool NEEDS_NOISE = true; + u16 column_height_min; + u16 column_height_max; + float column_midpoint_factor; + + virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, + v3s16 nmin, v3s16 nmax, u8 *biomemap); +}; + +class OrePuff : public Ore { +public: + static const bool NEEDS_NOISE = true; + + NoiseParams np_puff_top; + NoiseParams np_puff_bottom; + Noise *noise_puff_top; + Noise *noise_puff_bottom; + + OrePuff(); + virtual ~OrePuff(); + virtual void generate(MMVManip *vm, int mapseed, u32 blockseed, v3s16 nmin, v3s16 nmax, u8 *biomemap); }; @@ -130,6 +151,8 @@ public: return new OreScatter; case ORE_SHEET: return new OreSheet; + case ORE_PUFF: + return new OrePuff; case ORE_BLOB: return new OreBlob; case ORE_VEIN: diff --git a/src/minimap.cpp b/src/minimap.cpp new file mode 100644 index 00000000..1d80c258 --- /dev/null +++ b/src/minimap.cpp @@ -0,0 +1,560 @@ +/* +Minetest +Copyright (C) 2010-2015 celeron55, Perttu Ahola + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 3.0 of the License, or +(at your option) any later version. + +This program 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 Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "minimap.h" +#include "threading/mutex_auto_lock.h" +#include "threading/semaphore.h" +#include "clientmap.h" +#include "settings.h" +#include "nodedef.h" +#include "porting.h" +#include "util/numeric.h" +#include "util/string.h" +#include + + +//// +//// MinimapUpdateThread +//// + +MinimapUpdateThread::~MinimapUpdateThread() +{ + for (std::map::iterator + it = m_blocks_cache.begin(); + it != m_blocks_cache.end(); ++it) { + delete it->second; + } + + for (std::deque::iterator + it = m_update_queue.begin(); + it != m_update_queue.end(); ++it) { + QueuedMinimapUpdate &q = *it; + delete q.data; + } +} + +bool MinimapUpdateThread::pushBlockUpdate(v3s16 pos, MinimapMapblock *data) +{ + MutexAutoLock lock(m_queue_mutex); + + // Find if block is already in queue. + // If it is, update the data and quit. + for (std::deque::iterator + it = m_update_queue.begin(); + it != m_update_queue.end(); ++it) { + QueuedMinimapUpdate &q = *it; + if (q.pos == pos) { + delete q.data; + q.data = data; + return false; + } + } + + // Add the block + QueuedMinimapUpdate q; + q.pos = pos; + q.data = data; + m_update_queue.push_back(q); + + return true; +} + +bool MinimapUpdateThread::popBlockUpdate(QueuedMinimapUpdate *update) +{ + MutexAutoLock lock(m_queue_mutex); + + if (m_update_queue.empty()) + return false; + + *update = m_update_queue.front(); + m_update_queue.pop_front(); + + return true; +} + +void MinimapUpdateThread::enqueueBlock(v3s16 pos, MinimapMapblock *data) +{ + pushBlockUpdate(pos, data); + deferUpdate(); +} + + +void MinimapUpdateThread::doUpdate() +{ + QueuedMinimapUpdate update; + + while (popBlockUpdate(&update)) { + if (update.data) { + // Swap two values in the map using single lookup + std::pair::iterator, bool> + result = m_blocks_cache.insert(std::make_pair(update.pos, update.data)); + if (result.second == false) { + delete result.first->second; + result.first->second = update.data; + } + } else { + std::map::iterator it; + it = m_blocks_cache.find(update.pos); + if (it != m_blocks_cache.end()) { + delete it->second; + m_blocks_cache.erase(it); + } + } + } + + if (data->map_invalidated && data->mode != MINIMAP_MODE_OFF) { + getMap(data->pos, data->map_size, data->scan_height, data->is_radar); + data->map_invalidated = false; + } +} + +MinimapPixel *MinimapUpdateThread::getMinimapPixel(v3s16 pos, + s16 scan_height, s16 *pixel_height) +{ + s16 height = scan_height - MAP_BLOCKSIZE; + v3s16 blockpos_max, blockpos_min, relpos; + + getNodeBlockPosWithOffset( + v3s16(pos.X, pos.Y - scan_height / 2, pos.Z), + blockpos_min, relpos); + getNodeBlockPosWithOffset( + v3s16(pos.X, pos.Y + scan_height / 2, pos.Z), + blockpos_max, relpos); + + for (s16 i = blockpos_max.Y; i > blockpos_min.Y - 1; i--) { + std::map::iterator it = + m_blocks_cache.find(v3s16(blockpos_max.X, i, blockpos_max.Z)); + if (it != m_blocks_cache.end()) { + MinimapMapblock *mmblock = it->second; + MinimapPixel *pixel = &mmblock->data[relpos.Z * MAP_BLOCKSIZE + relpos.X]; + if (pixel->id != CONTENT_AIR) { + *pixel_height = height + pixel->height; + return pixel; + } + } + + height -= MAP_BLOCKSIZE; + } + + return NULL; +} + +s16 MinimapUpdateThread::getAirCount(v3s16 pos, s16 height) +{ + s16 air_count = 0; + v3s16 blockpos_max, blockpos_min, relpos; + + getNodeBlockPosWithOffset( + v3s16(pos.X, pos.Y - height / 2, pos.Z), + blockpos_min, relpos); + getNodeBlockPosWithOffset( + v3s16(pos.X, pos.Y + height / 2, pos.Z), + blockpos_max, relpos); + + for (s16 i = blockpos_max.Y; i > blockpos_min.Y - 1; i--) { + std::map::iterator it = + m_blocks_cache.find(v3s16(blockpos_max.X, i, blockpos_max.Z)); + if (it != m_blocks_cache.end()) { + MinimapMapblock *mmblock = it->second; + MinimapPixel *pixel = &mmblock->data[relpos.Z * MAP_BLOCKSIZE + relpos.X]; + air_count += pixel->air_count; + } + } + + return air_count; +} + +void MinimapUpdateThread::getMap(v3s16 pos, s16 size, s16 height, bool is_radar) +{ + v3s16 p = v3s16(pos.X - size / 2, pos.Y, pos.Z - size / 2); + + for (s16 x = 0; x < size; x++) + for (s16 z = 0; z < size; z++) { + u16 id = CONTENT_AIR; + MinimapPixel *mmpixel = &data->minimap_scan[x + z * size]; + + if (!is_radar) { + s16 pixel_height = 0; + MinimapPixel *cached_pixel = + getMinimapPixel(v3s16(p.X + x, p.Y, p.Z + z), height, &pixel_height); + if (cached_pixel) { + id = cached_pixel->id; + mmpixel->height = pixel_height; + } + } else { + mmpixel->air_count = getAirCount(v3s16(p.X + x, p.Y, p.Z + z), height); + } + + mmpixel->id = id; + } +} + +//// +//// Mapper +//// + +Mapper::Mapper(IrrlichtDevice *device, Client *client) +{ + this->driver = device->getVideoDriver(); + this->m_tsrc = client->getTextureSource(); + this->m_shdrsrc = client->getShaderSource(); + this->m_ndef = client->getNodeDefManager(); + + // Initialize static settings + m_enable_shaders = g_settings->getBool("enable_shaders"); + m_surface_mode_scan_height = + g_settings->getBool("minimap_double_scan_height") ? 256 : 128; + + // Initialize minimap data + data = new MinimapData; + data->mode = MINIMAP_MODE_OFF; + data->is_radar = false; + data->map_invalidated = true; + data->heightmap_image = NULL; + data->minimap_image = NULL; + data->texture = NULL; + data->heightmap_texture = NULL; + data->minimap_shape_round = g_settings->getBool("minimap_shape_round"); + + // Get round minimap textures + data->minimap_mask_round = driver->createImage( + m_tsrc->getTexture("minimap_mask_round.png"), + core::position2d(0, 0), + core::dimension2d(MINIMAP_MAX_SX, MINIMAP_MAX_SY)); + data->minimap_overlay_round = m_tsrc->getTexture("minimap_overlay_round.png"); + + // Get square minimap textures + data->minimap_mask_square = driver->createImage( + m_tsrc->getTexture("minimap_mask_square.png"), + core::position2d(0, 0), + core::dimension2d(MINIMAP_MAX_SX, MINIMAP_MAX_SY)); + data->minimap_overlay_square = m_tsrc->getTexture("minimap_overlay_square.png"); + + // Create player marker texture + data->player_marker = m_tsrc->getTexture("player_marker.png"); + + // Create mesh buffer for minimap + m_meshbuffer = getMinimapMeshBuffer(); + + // Initialize and start thread + m_minimap_update_thread = new MinimapUpdateThread(); + m_minimap_update_thread->data = data; + m_minimap_update_thread->start(); +} + +Mapper::~Mapper() +{ + m_minimap_update_thread->stop(); + m_minimap_update_thread->wait(); + + m_meshbuffer->drop(); + + data->minimap_mask_round->drop(); + data->minimap_mask_square->drop(); + + driver->removeTexture(data->texture); + driver->removeTexture(data->heightmap_texture); + driver->removeTexture(data->minimap_overlay_round); + driver->removeTexture(data->minimap_overlay_square); + + delete data; + delete m_minimap_update_thread; +} + +void Mapper::addBlock(v3s16 pos, MinimapMapblock *data) +{ + m_minimap_update_thread->enqueueBlock(pos, data); +} + +MinimapMode Mapper::getMinimapMode() +{ + return data->mode; +} + +void Mapper::toggleMinimapShape() +{ + MutexAutoLock lock(m_mutex); + + data->minimap_shape_round = !data->minimap_shape_round; + g_settings->setBool("minimap_shape_round", data->minimap_shape_round); + m_minimap_update_thread->deferUpdate(); +} + +void Mapper::setMinimapMode(MinimapMode mode) +{ + static const MinimapModeDef modedefs[MINIMAP_MODE_COUNT] = { + {false, 0, 0}, + {false, m_surface_mode_scan_height, 256}, + {false, m_surface_mode_scan_height, 128}, + {false, m_surface_mode_scan_height, 64}, + {true, 32, 128}, + {true, 32, 64}, + {true, 32, 32} + }; + + if (mode >= MINIMAP_MODE_COUNT) + return; + + MutexAutoLock lock(m_mutex); + + data->is_radar = modedefs[mode].is_radar; + data->scan_height = modedefs[mode].scan_height; + data->map_size = modedefs[mode].map_size; + data->mode = mode; + + m_minimap_update_thread->deferUpdate(); +} + +void Mapper::setPos(v3s16 pos) +{ + bool do_update = false; + + { + MutexAutoLock lock(m_mutex); + + if (pos != data->old_pos) { + data->old_pos = data->pos; + data->pos = pos; + do_update = true; + } + } + + if (do_update) + m_minimap_update_thread->deferUpdate(); +} + +void Mapper::setAngle(f32 angle) +{ + m_angle = angle; +} + +void Mapper::blitMinimapPixelsToImageRadar(video::IImage *map_image) +{ + for (s16 x = 0; x < data->map_size; x++) + for (s16 z = 0; z < data->map_size; z++) { + MinimapPixel *mmpixel = &data->minimap_scan[x + z * data->map_size]; + + video::SColor c(240, 0, 0, 0); + if (mmpixel->air_count > 0) + c.setGreen(core::clamp(core::round32(32 + mmpixel->air_count * 8), 0, 255)); + + map_image->setPixel(x, data->map_size - z - 1, c); + } +} + +void Mapper::blitMinimapPixelsToImageSurface( + video::IImage *map_image, video::IImage *heightmap_image) +{ + for (s16 x = 0; x < data->map_size; x++) + for (s16 z = 0; z < data->map_size; z++) { + MinimapPixel *mmpixel = &data->minimap_scan[x + z * data->map_size]; + + video::SColor c = m_ndef->get(mmpixel->id).minimap_color; + c.setAlpha(240); + + map_image->setPixel(x, data->map_size - z - 1, c); + + u32 h = mmpixel->height; + heightmap_image->setPixel(x,data->map_size - z - 1, + video::SColor(255, h, h, h)); + } +} + +video::ITexture *Mapper::getMinimapTexture() +{ + // update minimap textures when new scan is ready + if (data->map_invalidated) + return data->texture; + + // create minimap and heightmap images in memory + core::dimension2d dim(data->map_size, data->map_size); + video::IImage *map_image = driver->createImage(video::ECF_A8R8G8B8, dim); + video::IImage *heightmap_image = driver->createImage(video::ECF_A8R8G8B8, dim); + video::IImage *minimap_image = driver->createImage(video::ECF_A8R8G8B8, + core::dimension2d(MINIMAP_MAX_SX, MINIMAP_MAX_SY)); + + // Blit MinimapPixels to images + if (data->is_radar) + blitMinimapPixelsToImageRadar(map_image); + else + blitMinimapPixelsToImageSurface(map_image, heightmap_image); + + map_image->copyToScaling(minimap_image); + map_image->drop(); + + video::IImage *minimap_mask = data->minimap_shape_round ? + data->minimap_mask_round : data->minimap_mask_square; + + if (minimap_mask) { + for (s16 y = 0; y < MINIMAP_MAX_SY; y++) + for (s16 x = 0; x < MINIMAP_MAX_SX; x++) { + video::SColor mask_col = minimap_mask->getPixel(x, y); + if (!mask_col.getAlpha()) + minimap_image->setPixel(x, y, video::SColor(0,0,0,0)); + } + } + + if (data->texture) + driver->removeTexture(data->texture); + if (data->heightmap_texture) + driver->removeTexture(data->heightmap_texture); + + data->texture = driver->addTexture("minimap__", minimap_image); + data->heightmap_texture = + driver->addTexture("minimap_heightmap__", heightmap_image); + minimap_image->drop(); + heightmap_image->drop(); + + data->map_invalidated = true; + + return data->texture; +} + +v3f Mapper::getYawVec() +{ + if (data->minimap_shape_round) { + return v3f( + cos(m_angle * core::DEGTORAD), + sin(m_angle * core::DEGTORAD), + 1.0); + } else { + return v3f(1.0, 0.0, 1.0); + } +} + +scene::SMeshBuffer *Mapper::getMinimapMeshBuffer() +{ + scene::SMeshBuffer *buf = new scene::SMeshBuffer(); + buf->Vertices.set_used(4); + buf->Indices.set_used(6); + video::SColor c(255, 255, 255, 255); + + buf->Vertices[0] = video::S3DVertex(-1, -1, 0, 0, 0, 1, c, 0, 1); + buf->Vertices[1] = video::S3DVertex(-1, 1, 0, 0, 0, 1, c, 0, 0); + buf->Vertices[2] = video::S3DVertex( 1, 1, 0, 0, 0, 1, c, 1, 0); + buf->Vertices[3] = video::S3DVertex( 1, -1, 0, 0, 0, 1, c, 1, 1); + + buf->Indices[0] = 0; + buf->Indices[1] = 1; + buf->Indices[2] = 2; + buf->Indices[3] = 2; + buf->Indices[4] = 3; + buf->Indices[5] = 0; + + return buf; +} + +void Mapper::drawMinimap() +{ + video::ITexture *minimap_texture = getMinimapTexture(); + if (!minimap_texture) + return; + + v2u32 screensize = porting::getWindowSize(); + const u32 size = 0.25 * screensize.Y; + + core::rect oldViewPort = driver->getViewPort(); + core::matrix4 oldProjMat = driver->getTransform(video::ETS_PROJECTION); + core::matrix4 oldViewMat = driver->getTransform(video::ETS_VIEW); + + driver->setViewPort(core::rect( + screensize.X - size - 10, 10, + screensize.X - 10, size + 10)); + driver->setTransform(video::ETS_PROJECTION, core::matrix4()); + driver->setTransform(video::ETS_VIEW, core::matrix4()); + + core::matrix4 matrix; + matrix.makeIdentity(); + + video::SMaterial &material = m_meshbuffer->getMaterial(); + material.setFlag(video::EMF_TRILINEAR_FILTER, true); + material.Lighting = false; + material.TextureLayer[0].Texture = minimap_texture; + material.TextureLayer[1].Texture = data->heightmap_texture; + + if (m_enable_shaders && !data->is_radar) { + u16 sid = m_shdrsrc->getShader("minimap_shader", 1, 1); + material.MaterialType = m_shdrsrc->getShaderInfo(sid).material; + } else { + material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; + } + + if (data->minimap_shape_round) + matrix.setRotationDegrees(core::vector3df(0, 0, 360 - m_angle)); + + // Draw minimap + driver->setTransform(video::ETS_WORLD, matrix); + driver->setMaterial(material); + driver->drawMeshBuffer(m_meshbuffer); + + // Draw overlay + video::ITexture *minimap_overlay = data->minimap_shape_round ? + data->minimap_overlay_round : data->minimap_overlay_square; + material.TextureLayer[0].Texture = minimap_overlay; + material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; + driver->setMaterial(material); + driver->drawMeshBuffer(m_meshbuffer); + + // If round minimap, draw player marker + if (!data->minimap_shape_round) { + matrix.setRotationDegrees(core::vector3df(0, 0, m_angle)); + material.TextureLayer[0].Texture = data->player_marker; + + driver->setTransform(video::ETS_WORLD, matrix); + driver->setMaterial(material); + driver->drawMeshBuffer(m_meshbuffer); + } + + // Reset transformations + driver->setTransform(video::ETS_VIEW, oldViewMat); + driver->setTransform(video::ETS_PROJECTION, oldProjMat); + driver->setViewPort(oldViewPort); +} + +//// +//// MinimapMapblock +//// + +void MinimapMapblock::getMinimapNodes(VoxelManipulator *vmanip, v3s16 pos) +{ + + for (s16 x = 0; x < MAP_BLOCKSIZE; x++) + for (s16 z = 0; z < MAP_BLOCKSIZE; z++) { + s16 air_count = 0; + bool surface_found = false; + MinimapPixel *mmpixel = &data[z * MAP_BLOCKSIZE + x]; + + for (s16 y = MAP_BLOCKSIZE -1; y >= 0; y--) { + v3s16 p(x, y, z); + MapNode n = vmanip->getNodeNoEx(pos + p); + if (!surface_found && n.getContent() != CONTENT_AIR) { + mmpixel->height = y; + mmpixel->id = n.getContent(); + surface_found = true; + } else if (n.getContent() == CONTENT_AIR) { + air_count++; + } + } + + if (!surface_found) + mmpixel->id = CONTENT_AIR; + + mmpixel->air_count = air_count; + } +} diff --git a/src/minimap.h b/src/minimap.h new file mode 100644 index 00000000..4e59015a --- /dev/null +++ b/src/minimap.h @@ -0,0 +1,158 @@ +/* +Minetest +Copyright (C) 2010-2015 celeron55, Perttu Ahola + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 3.0 of the License, or +(at your option) any later version. + +This program 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 Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef MINIMAP_HEADER +#define MINIMAP_HEADER + +#include "irrlichttypes_extrabloated.h" +#include "client.h" +#include "voxel.h" +#include "threading/mutex.h" +#include "threading/semaphore.h" +#include +#include +#include + +#define MINIMAP_MAX_SX 512 +#define MINIMAP_MAX_SY 512 + + +enum MinimapMode { + MINIMAP_MODE_OFF, + MINIMAP_MODE_SURFACEx1, + MINIMAP_MODE_SURFACEx2, + MINIMAP_MODE_SURFACEx4, + MINIMAP_MODE_RADARx1, + MINIMAP_MODE_RADARx2, + MINIMAP_MODE_RADARx4, + MINIMAP_MODE_COUNT, +}; + +struct MinimapModeDef { + bool is_radar; + u16 scan_height; + u16 map_size; +}; + +struct MinimapPixel { + u16 id; + u16 height; + u16 air_count; + u16 light; +}; + +struct MinimapMapblock { + void getMinimapNodes(VoxelManipulator *vmanip, v3s16 pos); + + MinimapPixel data[MAP_BLOCKSIZE * MAP_BLOCKSIZE]; +}; + +struct MinimapData { + bool is_radar; + MinimapMode mode; + v3s16 pos; + v3s16 old_pos; + u16 scan_height; + u16 map_size; + MinimapPixel minimap_scan[MINIMAP_MAX_SX * MINIMAP_MAX_SY]; + bool map_invalidated; + bool minimap_shape_round; + video::IImage *minimap_image; + video::IImage *heightmap_image; + video::IImage *minimap_mask_round; + video::IImage *minimap_mask_square; + video::ITexture *texture; + video::ITexture *heightmap_texture; + video::ITexture *minimap_overlay_round; + video::ITexture *minimap_overlay_square; + video::ITexture *player_marker; +}; + +struct QueuedMinimapUpdate { + v3s16 pos; + MinimapMapblock *data; +}; + +class MinimapUpdateThread : public UpdateThread { +public: + MinimapUpdateThread() : UpdateThread("Minimap") {} + virtual ~MinimapUpdateThread(); + + void getMap(v3s16 pos, s16 size, s16 height, bool radar); + MinimapPixel *getMinimapPixel(v3s16 pos, s16 height, s16 *pixel_height); + s16 getAirCount(v3s16 pos, s16 height); + video::SColor getColorFromId(u16 id); + + void enqueueBlock(v3s16 pos, MinimapMapblock *data); + + bool pushBlockUpdate(v3s16 pos, MinimapMapblock *data); + bool popBlockUpdate(QueuedMinimapUpdate *update); + + MinimapData *data; + +protected: + virtual void doUpdate(); + +private: + Mutex m_queue_mutex; + std::deque m_update_queue; + std::map m_blocks_cache; +}; + +class Mapper { +public: + Mapper(IrrlichtDevice *device, Client *client); + ~Mapper(); + + void addBlock(v3s16 pos, MinimapMapblock *data); + + v3f getYawVec(); + MinimapMode getMinimapMode(); + + void setPos(v3s16 pos); + void setAngle(f32 angle); + void setMinimapMode(MinimapMode mode); + void toggleMinimapShape(); + + + video::ITexture *getMinimapTexture(); + + void blitMinimapPixelsToImageRadar(video::IImage *map_image); + void blitMinimapPixelsToImageSurface(video::IImage *map_image, + video::IImage *heightmap_image); + + scene::SMeshBuffer *getMinimapMeshBuffer(); + void drawMinimap(); + + video::IVideoDriver *driver; + MinimapData *data; + +private: + ITextureSource *m_tsrc; + IShaderSource *m_shdrsrc; + INodeDefManager *m_ndef; + MinimapUpdateThread *m_minimap_update_thread; + scene::SMeshBuffer *m_meshbuffer; + bool m_enable_shaders; + u16 m_surface_mode_scan_height; + f32 m_angle; + Mutex m_mutex; +}; + +#endif diff --git a/src/mods.cpp b/src/mods.cpp index 56eb6613..e604c742 100644 --- a/src/mods.cpp +++ b/src/mods.cpp @@ -27,6 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "settings.h" #include "strfnd.h" #include "convert_json.h" +#include "exceptions.h" static bool parseDependsLine(std::istream &is, std::string &dep, std::set &symbols) @@ -256,7 +257,7 @@ void ModConfiguration::addMods(std::vector new_mods) // BAD CASE: name conflict in different levels. u32 oldindex = existing_mods[mod.name]; const ModSpec &oldmod = m_unsatisfied_mods[oldindex]; - actionstream<<"WARNING: Mod name conflict detected: \"" + warningstream<<"Mod name conflict detected: \"" < new_mods) // VERY BAD CASE: name conflict in the same level. u32 oldindex = existing_mods[mod.name]; const ModSpec &oldmod = m_unsatisfied_mods[oldindex]; - errorstream<<"WARNING: Mod name conflict detected: \"" + warningstream<<"Mod name conflict detected: \"" < #include #include -#include #include "json/json.h" #include "config.h" #define MODNAME_ALLOWED_CHARS "abcdefghijklmnopqrstuvwxyz0123456789_" -class ModError : public std::exception -{ -public: - ModError(const std::string &s) - { - m_s = "ModError: "; - m_s += s; - } - virtual ~ModError() throw() - {} - virtual const char * what() const throw() - { - return m_s.c_str(); - } - std::string m_s; -}; - struct ModSpec { std::string name; diff --git a/src/nameidmapping.cpp b/src/nameidmapping.cpp index 8ca578a6..2af09cee 100644 --- a/src/nameidmapping.cpp +++ b/src/nameidmapping.cpp @@ -27,7 +27,7 @@ void NameIdMapping::serialize(std::ostream &os) const writeU16(os, m_id_to_name.size()); for(std::map::const_iterator i = m_id_to_name.begin(); - i != m_id_to_name.end(); i++){ + i != m_id_to_name.end(); ++i){ writeU16(os, i->first); os<second); } diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp index 3104bb1c..3804aea1 100644 --- a/src/network/clientpackethandler.cpp +++ b/src/network/clientpackethandler.cpp @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" #include "map.h" #include "mapsector.h" +#include "minimap.h" #include "nodedef.h" #include "serialization.h" #include "server.h" @@ -56,8 +57,9 @@ void Client::handleCommand_Hello(NetworkPacket* pkt) AuthMechanism chosen_auth_mechanism = choseAuthMech(auth_mechs); infostream << "Client: TOCLIENT_HELLO received with " - << "serialization_ver=" << serialization_ver + << "serialization_ver=" << (u32)serialization_ver << ", auth_mechs=" << auth_mechs + << ", proto_ver=" << proto_ver << ", compression_mode=" << compression_mode << ". Doing auth with mech " << chosen_auth_mechanism << std::endl; @@ -99,7 +101,6 @@ void Client::handleCommand_Hello(NetworkPacket* pkt) void Client::handleCommand_AuthAccept(NetworkPacket* pkt) { - m_chosen_auth_mech = AUTH_MECHANISM_NONE; deleteAuthData(); v3f playerpos; @@ -125,7 +126,6 @@ void Client::handleCommand_AuthAccept(NetworkPacket* pkt) } void Client::handleCommand_AcceptSudoMode(NetworkPacket* pkt) { - m_chosen_auth_mech = AUTH_MECHANISM_NONE; deleteAuthData(); m_password = m_new_password; @@ -143,27 +143,29 @@ void Client::handleCommand_DenySudoMode(NetworkPacket* pkt) m_chat_queue.push(L"Password change denied. Password NOT changed."); // reset everything and be sad deleteAuthData(); - m_chosen_auth_mech = AUTH_MECHANISM_NONE; } void Client::handleCommand_InitLegacy(NetworkPacket* pkt) { if (pkt->getSize() < 1) return; - u8 deployed; - *pkt >> deployed; + u8 server_ser_ver; + *pkt >> server_ser_ver; infostream << "Client: TOCLIENT_INIT_LEGACY received with " - "deployed=" << ((int)deployed & 0xff) << std::endl; + "server_ser_ver=" << ((int)server_ser_ver & 0xff) << std::endl; - if (!ser_ver_supported(deployed)) { + if (!ser_ver_supported(server_ser_ver)) { infostream << "Client: TOCLIENT_INIT_LEGACY: Server sent " << "unsupported ser_fmt_ver"<< std::endl; return; } - m_server_ser_ver = deployed; - m_proto_ver = deployed; + m_server_ser_ver = server_ser_ver; + + // We can be totally wrong with this guess + // but we only need some value < 25. + m_proto_ver = 24; // Get player position v3s16 playerpos_s16(0, BS * 2 + BS * 20, 0); @@ -211,11 +213,28 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt) u8 denyCode = SERVER_ACCESSDENIED_UNEXPECTED_DATA; *pkt >> denyCode; - if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) { + if (denyCode == SERVER_ACCESSDENIED_SHUTDOWN || + denyCode == SERVER_ACCESSDENIED_CRASH) { *pkt >> m_access_denied_reason; - } - else if (denyCode < SERVER_ACCESSDENIED_MAX) { + if (m_access_denied_reason == "") { + m_access_denied_reason = accessDeniedStrings[denyCode]; + } + u8 reconnect; + *pkt >> reconnect; + m_access_denied_reconnect = reconnect & 1; + } else if (denyCode == SERVER_ACCESSDENIED_CUSTOM_STRING) { + *pkt >> m_access_denied_reason; + } else if (denyCode < SERVER_ACCESSDENIED_MAX) { m_access_denied_reason = accessDeniedStrings[denyCode]; + } else { + // Allow us to add new error messages to the + // protocol without raising the protocol version, if we want to. + // Until then (which may be never), this is outside + // of the defined protocol. + *pkt >> m_access_denied_reason; + if (m_access_denied_reason == "") { + m_access_denied_reason = "Unknown"; + } } } // 13/03/15 Legacy code from 0.4.12 and lesser. must stay 1 year @@ -224,7 +243,7 @@ void Client::handleCommand_AccessDenied(NetworkPacket* pkt) if (pkt->getSize() >= 2) { std::wstring wide_reason; *pkt >> wide_reason; - m_access_denied_reason = wide_to_narrow(wide_reason); + m_access_denied_reason = wide_to_utf8(wide_reason); } } } @@ -445,33 +464,23 @@ void Client::handleCommand_ActiveObjectMessages(NetworkPacket* pkt) string message } */ - char buf[6]; - // Get all data except the command number std::string datastring(pkt->getString(0), pkt->getSize()); - // Throw them in an istringstream std::istringstream is(datastring, std::ios_base::binary); try { - while(is.eof() == false) { - is.read(buf, 2); - u16 id = readU16((u8*)buf); - if (is.eof()) + while (is.good()) { + u16 id = readU16(is); + if (!is.good()) break; - is.read(buf, 2); - size_t message_size = readU16((u8*)buf); - std::string message; - message.reserve(message_size); - for (u32 i = 0; i < message_size; i++) { - is.read(buf, 1); - message.append(buf, 1); - } + + std::string message = deSerializeString(is); + // Pass on to the environment m_env.processActiveObjectMessage(id, message); } - // Packet could be unreliable then ignore it - } catch (PacketError &e) { - infostream << "handleCommand_ActiveObjectMessages: " << e.what() - << ". The packet is unreliable, ignoring" << std::endl; + } catch (SerializationError &e) { + errorstream << "Client::handleCommand_ActiveObjectMessages: " + << "caught SerializationError: " << e.what() << std::endl; } } @@ -570,7 +579,7 @@ void Client::handleCommand_MovePlayer(NetworkPacket* pkt) void Client::handleCommand_PlayerItem(NetworkPacket* pkt) { - infostream << "Client: WARNING: Ignoring TOCLIENT_PLAYERITEM" << std::endl; + warningstream << "Client: Ignoring TOCLIENT_PLAYERITEM" << std::endl; } void Client::handleCommand_DeathScreen(NetworkPacket* pkt) @@ -613,7 +622,7 @@ void Client::handleCommand_AnnounceMedia(NetworkPacket* pkt) // Mesh update thread must be stopped while // updating content definitions - sanity_check(!m_mesh_update_thread.IsRunning()); + sanity_check(!m_mesh_update_thread.isRunning()); for (u16 i = 0; i < num_files; i++) { std::string name, sha1_base64; @@ -686,7 +695,7 @@ void Client::handleCommand_Media(NetworkPacket* pkt) // Mesh update thread must be stopped while // updating content definitions - sanity_check(!m_mesh_update_thread.IsRunning()); + sanity_check(!m_mesh_update_thread.isRunning()); for (u32 i=0; i < num_files; i++) { std::string name; @@ -702,7 +711,7 @@ void Client::handleCommand_Media(NetworkPacket* pkt) void Client::handleCommand_ToolDef(NetworkPacket* pkt) { - infostream << "Client: WARNING: Ignoring TOCLIENT_TOOLDEF" << std::endl; + warningstream << "Client: Ignoring TOCLIENT_TOOLDEF" << std::endl; } void Client::handleCommand_NodeDef(NetworkPacket* pkt) @@ -712,7 +721,7 @@ void Client::handleCommand_NodeDef(NetworkPacket* pkt) // Mesh update thread must be stopped while // updating content definitions - sanity_check(!m_mesh_update_thread.IsRunning()); + sanity_check(!m_mesh_update_thread.isRunning()); // Decompress node definitions std::string datastring(pkt->getString(0), pkt->getSize()); @@ -729,7 +738,7 @@ void Client::handleCommand_NodeDef(NetworkPacket* pkt) void Client::handleCommand_CraftItemDef(NetworkPacket* pkt) { - infostream << "Client: WARNING: Ignoring TOCLIENT_CRAFTITEMDEF" << std::endl; + warningstream << "Client: Ignoring TOCLIENT_CRAFTITEMDEF" << std::endl; } void Client::handleCommand_ItemDef(NetworkPacket* pkt) @@ -739,7 +748,7 @@ void Client::handleCommand_ItemDef(NetworkPacket* pkt) // Mesh update thread must be stopped while // updating content definitions - sanity_check(!m_mesh_update_thread.IsRunning()); + sanity_check(!m_mesh_update_thread.isRunning()); // Decompress item definitions std::string datastring(pkt->getString(0), pkt->getSize()); @@ -1086,8 +1095,19 @@ void Client::handleCommand_HudSetFlags(NetworkPacket* pkt) Player *player = m_env.getLocalPlayer(); assert(player != NULL); + bool was_minimap_visible = player->hud_flags & HUD_FLAG_MINIMAP_VISIBLE; + player->hud_flags &= ~mask; player->hud_flags |= flags; + + m_minimap_disabled_by_server = !(player->hud_flags & HUD_FLAG_MINIMAP_VISIBLE); + + // Hide minimap if it has been disabled by the server + if (m_minimap_disabled_by_server && was_minimap_visible) { + // defers a minimap update, therefore only call it if really + // needed, by checking that minimap was visible before + m_mapper->setMinimapMode(MINIMAP_MODE_OFF); + } } void Client::handleCommand_HudSetParam(NetworkPacket* pkt) @@ -1200,4 +1220,4 @@ void Client::handleCommand_SrpBytesSandB(NetworkPacket* pkt) NetworkPacket resp_pkt(TOSERVER_SRP_BYTES_M, 0); resp_pkt << std::string(bytes_M, len_M); Send(&resp_pkt); -} +} \ No newline at end of file diff --git a/src/network/connection.cpp b/src/network/connection.cpp index adc692b6..c6ee21c7 100644 --- a/src/network/connection.cpp +++ b/src/network/connection.cpp @@ -42,10 +42,10 @@ namespace con #undef DEBUG_CONNECTION_KBPS #else /* this mutex is used to achieve log message consistency */ -JMutex log_message_mutex; +Mutex log_message_mutex; #define LOG(a) \ { \ - JMutexAutoLock loglock(log_message_mutex); \ + MutexAutoLock loglock(log_message_mutex); \ a; \ } #define PROFILE(a) a @@ -209,7 +209,7 @@ ReliablePacketBuffer::ReliablePacketBuffer(): m_list_size(0) {} void ReliablePacketBuffer::print() { - JMutexAutoLock listlock(m_list_mutex); + MutexAutoLock listlock(m_list_mutex); LOG(dout_con<<"Dump of ReliablePacketBuffer:" << std::endl); unsigned int index = 0; for(std::list::iterator i = m_list.begin(); @@ -223,7 +223,7 @@ void ReliablePacketBuffer::print() } bool ReliablePacketBuffer::empty() { - JMutexAutoLock listlock(m_list_mutex); + MutexAutoLock listlock(m_list_mutex); return m_list.empty(); } @@ -256,7 +256,7 @@ RPBSearchResult ReliablePacketBuffer::notFound() } bool ReliablePacketBuffer::getFirstSeqnum(u16& result) { - JMutexAutoLock listlock(m_list_mutex); + MutexAutoLock listlock(m_list_mutex); if (m_list.empty()) return false; BufferedPacket p = *m_list.begin(); @@ -266,7 +266,7 @@ bool ReliablePacketBuffer::getFirstSeqnum(u16& result) BufferedPacket ReliablePacketBuffer::popFirst() { - JMutexAutoLock listlock(m_list_mutex); + MutexAutoLock listlock(m_list_mutex); if (m_list.empty()) throw NotFoundException("Buffer is empty"); BufferedPacket p = *m_list.begin(); @@ -283,7 +283,7 @@ BufferedPacket ReliablePacketBuffer::popFirst() } BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum) { - JMutexAutoLock listlock(m_list_mutex); + MutexAutoLock listlock(m_list_mutex); RPBSearchResult r = findPacket(seqnum); if (r == notFound()) { LOG(dout_con<<"Sequence number: " << seqnum @@ -294,7 +294,7 @@ BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum) RPBSearchResult next = r; - next++; + ++next; if (next != notFound()) { u16 s = readU16(&(next->data[BASE_HEADER_SIZE+1])); m_oldest_non_answered_ack = s; @@ -311,14 +311,30 @@ BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum) } void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected) { - JMutexAutoLock listlock(m_list_mutex); - FATAL_ERROR_IF(p.data.getSize() < BASE_HEADER_SIZE+3, "Invalid data size"); - u8 type = readU8(&p.data[BASE_HEADER_SIZE+0]); - sanity_check(type == TYPE_RELIABLE); - u16 seqnum = readU16(&p.data[BASE_HEADER_SIZE+1]); + MutexAutoLock listlock(m_list_mutex); + if (p.data.getSize() < BASE_HEADER_SIZE + 3) { + errorstream << "ReliablePacketBuffer::insert(): Invalid data size for " + "reliable packet" << std::endl; + return; + } + u8 type = readU8(&p.data[BASE_HEADER_SIZE + 0]); + if (type != TYPE_RELIABLE) { + errorstream << "ReliablePacketBuffer::insert(): type is not reliable" + << std::endl; + return; + } + u16 seqnum = readU16(&p.data[BASE_HEADER_SIZE + 1]); - sanity_check(seqnum_in_window(seqnum, next_expected, MAX_RELIABLE_WINDOW_SIZE)); - sanity_check(seqnum != next_expected); + if (!seqnum_in_window(seqnum, next_expected, MAX_RELIABLE_WINDOW_SIZE)) { + errorstream << "ReliablePacketBuffer::insert(): seqnum is outside of " + "expected window " << std::endl; + return; + } + if (seqnum == next_expected) { + errorstream << "ReliablePacketBuffer::insert(): seqnum is next expected" + << std::endl; + return; + } ++m_list_size; sanity_check(m_list_size <= SEQNUM_MAX+1); // FIXME: Handle the error? @@ -342,7 +358,7 @@ void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected) /* this is true e.g. on wrap around */ if (seqnum < next_expected) { while(((s < seqnum) || (s >= next_expected)) && (i != m_list.end())) { - i++; + ++i; if (i != m_list.end()) s = readU16(&(i->data[BASE_HEADER_SIZE+1])); } @@ -351,7 +367,7 @@ void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected) else { while(((s < seqnum) && (s >= next_expected)) && (i != m_list.end())) { - i++; + ++i; if (i != m_list.end()) s = readU16(&(i->data[BASE_HEADER_SIZE+1])); } @@ -377,10 +393,6 @@ void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected) throw IncomingDataCorruption("duplicated packet isn't same as original one"); } - sanity_check(readU16(&(i->data[BASE_HEADER_SIZE+1])) == seqnum); - sanity_check(i->data.getSize() == p.data.getSize()); - sanity_check(i->address == p.address); - /* nothing to do this seems to be a resent packet */ /* for paranoia reason data should be compared */ --m_list_size; @@ -399,7 +411,7 @@ void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected) void ReliablePacketBuffer::incrementTimeouts(float dtime) { - JMutexAutoLock listlock(m_list_mutex); + MutexAutoLock listlock(m_list_mutex); for(std::list::iterator i = m_list.begin(); i != m_list.end(); ++i) { @@ -411,7 +423,7 @@ void ReliablePacketBuffer::incrementTimeouts(float dtime) std::list ReliablePacketBuffer::getTimedOuts(float timeout, unsigned int max_packets) { - JMutexAutoLock listlock(m_list_mutex); + MutexAutoLock listlock(m_list_mutex); std::list timed_outs; for(std::list::iterator i = m_list.begin(); i != m_list.end(); ++i) @@ -434,7 +446,7 @@ std::list ReliablePacketBuffer::getTimedOuts(float timeout, IncomingSplitBuffer::~IncomingSplitBuffer() { - JMutexAutoLock listlock(m_map_mutex); + MutexAutoLock listlock(m_map_mutex); for(std::map::iterator i = m_buf.begin(); i != m_buf.end(); ++i) { @@ -447,15 +459,23 @@ IncomingSplitBuffer::~IncomingSplitBuffer() */ SharedBuffer IncomingSplitBuffer::insert(BufferedPacket &p, bool reliable) { - JMutexAutoLock listlock(m_map_mutex); + MutexAutoLock listlock(m_map_mutex); u32 headersize = BASE_HEADER_SIZE + 7; - FATAL_ERROR_IF(p.data.getSize() < headersize, "Invalid data size"); + if (p.data.getSize() < headersize) { + errorstream << "Invalid data size for split packet" << std::endl; + return SharedBuffer(); + } u8 type = readU8(&p.data[BASE_HEADER_SIZE+0]); - sanity_check(type == TYPE_SPLIT); u16 seqnum = readU16(&p.data[BASE_HEADER_SIZE+1]); u16 chunk_count = readU16(&p.data[BASE_HEADER_SIZE+3]); u16 chunk_num = readU16(&p.data[BASE_HEADER_SIZE+5]); + if (type != TYPE_SPLIT) { + errorstream << "IncomingSplitBuffer::insert(): type is not split" + << std::endl; + return SharedBuffer(); + } + // Add if doesn't exist if (m_buf.find(seqnum) == m_buf.end()) { @@ -526,7 +546,7 @@ void IncomingSplitBuffer::removeUnreliableTimedOuts(float dtime, float timeout) { std::list remove_queue; { - JMutexAutoLock listlock(m_map_mutex); + MutexAutoLock listlock(m_map_mutex); for(std::map::iterator i = m_buf.begin(); i != m_buf.end(); ++i) { @@ -542,7 +562,7 @@ void IncomingSplitBuffer::removeUnreliableTimedOuts(float dtime, float timeout) for(std::list::iterator j = remove_queue.begin(); j != remove_queue.end(); ++j) { - JMutexAutoLock listlock(m_map_mutex); + MutexAutoLock listlock(m_map_mutex); LOG(dout_con<<"NOTE: Removing timed out unreliable split packet"< 10.0) { { - JMutexAutoLock internal(m_internal_mutex); + MutexAutoLock internal(m_internal_mutex); cur_kbps = (((float) current_bytes_transfered)/bpm_counter)/1024.0; current_bytes_transfered = 0; @@ -883,7 +903,7 @@ bool PeerHelper::operator!=(void* ptr) bool Peer::IncUseCount() { - JMutexAutoLock lock(m_exclusive_access_mutex); + MutexAutoLock lock(m_exclusive_access_mutex); if (!m_pending_deletion) { @@ -897,7 +917,7 @@ bool Peer::IncUseCount() void Peer::DecUseCount() { { - JMutexAutoLock lock(m_exclusive_access_mutex); + MutexAutoLock lock(m_exclusive_access_mutex); sanity_check(m_usage > 0); m_usage--; @@ -958,7 +978,7 @@ void Peer::RTTStatistics(float rtt, std::string profiler_id, bool Peer::isTimedOut(float timeout) { - JMutexAutoLock lock(m_exclusive_access_mutex); + MutexAutoLock lock(m_exclusive_access_mutex); u32 current_time = porting::getTimeMs(); float dtime = CALC_DTIME(m_last_timeout_check,current_time); @@ -972,7 +992,7 @@ bool Peer::isTimedOut(float timeout) void Peer::Drop() { { - JMutexAutoLock usage_lock(m_exclusive_access_mutex); + MutexAutoLock usage_lock(m_exclusive_access_mutex); m_pending_deletion = true; if (m_usage != 0) return; @@ -1031,7 +1051,7 @@ void UDPPeer::reportRTT(float rtt) if (timeout > RESEND_TIMEOUT_MAX) timeout = RESEND_TIMEOUT_MAX; - JMutexAutoLock usage_lock(m_exclusive_access_mutex); + MutexAutoLock usage_lock(m_exclusive_access_mutex); resend_timeout = timeout; } @@ -1235,8 +1255,9 @@ SharedBuffer UDPPeer::addSpiltPacket(u8 channel, /* Connection Threads */ /******************************************************************************/ -ConnectionSendThread::ConnectionSendThread( unsigned int max_packet_size, - float timeout) : +ConnectionSendThread::ConnectionSendThread(unsigned int max_packet_size, + float timeout) : + Thread("ConnectionSend"), m_connection(NULL), m_max_packet_size(max_packet_size), m_timeout(timeout), @@ -1246,11 +1267,9 @@ ConnectionSendThread::ConnectionSendThread( unsigned int max_packet_size, { } -void * ConnectionSendThread::Thread() +void * ConnectionSendThread::run() { - assert(m_connection != NULL); - ThreadStarted(); - log_register_thread("ConnectionSend"); + assert(m_connection); LOG(dout_con<getDesc() <<"ConnectionSend thread started"<getDesc() << "]"); - porting::setThreadName("ConnectionSend"); - /* if stop is requested don't stop immediately but try to send all */ /* packets first */ - while(!StopRequested() || packetsQueued()) { + while(!stopRequested() || packetsQueued()) { BEGIN_DEBUG_EXCEPTION_HANDLER PROFILE(ScopeProfiler sp(g_profiler, ThreadIdentifier.str(), SPT_AVG)); m_iteration_packets_avaialble = m_max_data_packets_per_iteration; /* wait for trigger or timeout */ - m_send_sleep_semaphore.Wait(50); + m_send_sleep_semaphore.wait(50); /* remove all triggers */ - while(m_send_sleep_semaphore.Wait(0)) {} + while(m_send_sleep_semaphore.wait(0)) {} lasttime = curtime; curtime = porting::getTimeMs(); @@ -1299,7 +1316,7 @@ void * ConnectionSendThread::Thread() /* send non reliable packets */ sendPackets(dtime); - END_DEBUG_EXCEPTION_HANDLER(errorstream); + END_DEBUG_EXCEPTION_HANDLER } PROFILE(g_profiler->remove(ThreadIdentifier.str())); @@ -1308,7 +1325,7 @@ void * ConnectionSendThread::Thread() void ConnectionSendThread::Trigger() { - m_send_sleep_semaphore.Post(); + m_send_sleep_semaphore.post(); } bool ConnectionSendThread::packetsQueued() @@ -1743,7 +1760,7 @@ void ConnectionSendThread::disconnect() for (std::list::iterator i = peerids.begin(); i != peerids.end(); - i++) + ++i) { sendAsPacket(*i, 0,data,false); } @@ -1823,7 +1840,7 @@ void ConnectionSendThread::sendToAll(u8 channelnum, SharedBuffer data) for (std::list::iterator i = peerids.begin(); i != peerids.end(); - i++) + ++i) { send(*i, channelnum, data); } @@ -1835,7 +1852,7 @@ void ConnectionSendThread::sendToAllReliable(ConnectionCommand &c) for (std::list::iterator i = peerids.begin(); i != peerids.end(); - i++) + ++i) { PeerHelper peer = m_connection->getPeerNoEx(*i); @@ -1964,7 +1981,7 @@ void ConnectionSendThread::sendPackets(float dtime) } else if ( ( peer->m_increment_packets_remaining > 0) || - (StopRequested())) { + (stopRequested())) { rawSendAsPacket(packet.peer_id, packet.channelnum, packet.data, packet.reliable); peer->m_increment_packets_remaining--; @@ -1994,15 +2011,14 @@ void ConnectionSendThread::sendAsPacket(u16 peer_id, u8 channelnum, } ConnectionReceiveThread::ConnectionReceiveThread(unsigned int max_packet_size) : + Thread("ConnectionReceive"), m_connection(NULL) { } -void * ConnectionReceiveThread::Thread() +void * ConnectionReceiveThread::run() { - assert(m_connection != NULL); - ThreadStarted(); - log_register_thread("ConnectionReceive"); + assert(m_connection); LOG(dout_con<getDesc() <<"ConnectionReceive thread started"<getDesc() << "]"); - porting::setThreadName("ConnectionReceive"); - #ifdef DEBUG_CONNECTION_KBPS u32 curtime = porting::getTimeMs(); u32 lasttime = curtime; float debug_print_timer = 0.0; #endif - while(!StopRequested()) { + while(!stopRequested()) { BEGIN_DEBUG_EXCEPTION_HANDLER PROFILE(ScopeProfiler sp(g_profiler, ThreadIdentifier.str(), SPT_AVG)); @@ -2083,8 +2097,9 @@ void * ConnectionReceiveThread::Thread() } } #endif - END_DEBUG_EXCEPTION_HANDLER(errorstream); + END_DEBUG_EXCEPTION_HANDLER } + PROFILE(g_profiler->remove(ThreadIdentifier.str())); return NULL; } @@ -2327,8 +2342,9 @@ SharedBuffer ConnectionReceiveThread::processPacket(Channel *channel, u8 type = readU8(&(packetdata[0])); if (MAX_UDP_PEERS <= 65535 && peer_id >= MAX_UDP_PEERS) { - errorstream << "Something is wrong with peer_id" << std::endl; - FATAL_ERROR(""); + std::string errmsg = "Invalid peer_id=" + itos(peer_id); + errorstream << errmsg << std::endl; + throw InvalidIncomingDataException(errmsg.c_str()); } if (type == TYPE_CONTROL) @@ -2340,10 +2356,12 @@ SharedBuffer ConnectionReceiveThread::processPacket(Channel *channel, if (controltype == CONTROLTYPE_ACK) { - FATAL_ERROR_IF(channel == 0, "Invalid channel (0)"); - if (packetdata.getSize() < 4) - throw InvalidIncomingDataException - ("packetdata.getSize() < 4 (ACK header size)"); + assert(channel != NULL); + + if (packetdata.getSize() < 4) { + throw InvalidIncomingDataException( + "packetdata.getSize() < 4 (ACK header size)"); + } u16 seqnum = readU16(&packetdata[2]); LOG(dout_con<getDesc() @@ -2508,7 +2526,8 @@ SharedBuffer ConnectionReceiveThread::processPacket(Channel *channel, } else if (type == TYPE_RELIABLE) { - FATAL_ERROR_IF(channel == 0, "Invalid channel (0)"); + assert(channel != NULL); + // Recursive reliable packets not allowed if (reliable) throw InvalidIncomingDataException("Found nested reliable packets"); @@ -2639,30 +2658,6 @@ SharedBuffer ConnectionReceiveThread::processPacket(Channel *channel, Connection */ -Connection::Connection(u32 protocol_id, u32 max_packet_size, float timeout, - bool ipv6) : - m_udpSocket(ipv6), - m_command_queue(), - m_event_queue(), - m_peer_id(0), - m_protocol_id(protocol_id), - m_sendThread(max_packet_size, timeout), - m_receiveThread(max_packet_size), - m_info_mutex(), - m_bc_peerhandler(0), - m_bc_receive_timeout(0), - m_shutting_down(false), - m_next_remote_peer_id(2) -{ - m_udpSocket.setTimeoutMs(5); - - m_sendThread.setParent(this); - m_receiveThread.setParent(this); - - m_sendThread.Start(); - m_receiveThread.Start(); -} - Connection::Connection(u32 protocol_id, u32 max_packet_size, float timeout, bool ipv6, PeerHandler *peerhandler) : m_udpSocket(ipv6), @@ -2684,8 +2679,8 @@ Connection::Connection(u32 protocol_id, u32 max_packet_size, float timeout, m_sendThread.setParent(this); m_receiveThread.setParent(this); - m_sendThread.Start(); - m_receiveThread.Start(); + m_sendThread.start(); + m_receiveThread.start(); } @@ -2694,8 +2689,8 @@ Connection::~Connection() { m_shutting_down = true; // request threads to stop - m_sendThread.Stop(); - m_receiveThread.Stop(); + m_sendThread.stop(); + m_receiveThread.stop(); //TODO for some unkonwn reason send/receive threads do not exit as they're // supposed to be but wait on peer timeout. To speed up shutdown we reduce @@ -2703,8 +2698,8 @@ Connection::~Connection() m_sendThread.setPeerTimeout(0.5); // wait for threads to finish - m_sendThread.Wait(); - m_receiveThread.Wait(); + m_sendThread.wait(); + m_receiveThread.wait(); // Delete peers for(std::map::iterator @@ -2724,7 +2719,7 @@ void Connection::putEvent(ConnectionEvent &e) PeerHelper Connection::getPeer(u16 peer_id) { - JMutexAutoLock peerlock(m_peers_mutex); + MutexAutoLock peerlock(m_peers_mutex); std::map::iterator node = m_peers.find(peer_id); if (node == m_peers.end()) { @@ -2739,7 +2734,7 @@ PeerHelper Connection::getPeer(u16 peer_id) PeerHelper Connection::getPeerNoEx(u16 peer_id) { - JMutexAutoLock peerlock(m_peers_mutex); + MutexAutoLock peerlock(m_peers_mutex); std::map::iterator node = m_peers.find(peer_id); if (node == m_peers.end()) { @@ -2755,7 +2750,7 @@ PeerHelper Connection::getPeerNoEx(u16 peer_id) /* find peer_id for address */ u16 Connection::lookupPeer(Address& sender) { - JMutexAutoLock peerlock(m_peers_mutex); + MutexAutoLock peerlock(m_peers_mutex); std::map::iterator j; j = m_peers.begin(); for(; j != m_peers.end(); ++j) @@ -2794,7 +2789,7 @@ bool Connection::deletePeer(u16 peer_id, bool timeout) /* lock list as short as possible */ { - JMutexAutoLock peerlock(m_peers_mutex); + MutexAutoLock peerlock(m_peers_mutex); if (m_peers.find(peer_id) == m_peers.end()) return false; peer = m_peers[peer_id]; @@ -2817,16 +2812,6 @@ bool Connection::deletePeer(u16 peer_id, bool timeout) /* Interface */ -ConnectionEvent Connection::getEvent() -{ - if (m_event_queue.empty()) { - ConnectionEvent e; - e.type = CONNEVENT_NONE; - return e; - } - return m_event_queue.pop_frontNoEx(); -} - ConnectionEvent Connection::waitEvent(u32 timeout_ms) { try { @@ -2862,7 +2847,7 @@ void Connection::Connect(Address address) bool Connection::Connected() { - JMutexAutoLock peerlock(m_peers_mutex); + MutexAutoLock peerlock(m_peers_mutex); if (m_peers.size() != 1) return false; @@ -2997,7 +2982,7 @@ u16 Connection::createPeer(Address& sender, MTProtocols protocol, int fd) /* Find an unused peer id */ - JMutexAutoLock lock(m_peers_mutex); + MutexAutoLock lock(m_peers_mutex); bool out_of_ids = false; for(;;) { // Check if exists @@ -3048,9 +3033,9 @@ u16 Connection::createPeer(Address& sender, MTProtocols protocol, int fd) void Connection::PrintInfo(std::ostream &out) { - m_info_mutex.Lock(); + m_info_mutex.lock(); out<id] = peer; m_peer_ids.push_back(peer->id); } diff --git a/src/network/connection.h b/src/network/connection.h index 5bd6beb5..4650fc1d 100644 --- a/src/network/connection.h +++ b/src/network/connection.h @@ -172,7 +172,7 @@ struct BufferedPacket data(a_size), time(0.0), totaltime(0.0), absolute_send_time(-1), resend_count(0) {} - SharedBuffer data; // Data of the packet, including headers + Buffer data; // Data of the packet, including headers float time; // Seconds from buffering the packet or re-sending float totaltime; // Seconds from buffering the packet unsigned int absolute_send_time; @@ -349,7 +349,7 @@ private: u16 m_oldest_non_answered_ack; - JMutex m_list_mutex; + Mutex m_list_mutex; }; /* @@ -372,7 +372,7 @@ private: // Key is seqnum std::map m_buf; - JMutex m_map_mutex; + Mutex m_map_mutex; }; struct OutgoingPacket @@ -519,32 +519,32 @@ public: void UpdateTimers(float dtime, bool legacy_peer); const float getCurrentDownloadRateKB() - { JMutexAutoLock lock(m_internal_mutex); return cur_kbps; }; + { MutexAutoLock lock(m_internal_mutex); return cur_kbps; }; const float getMaxDownloadRateKB() - { JMutexAutoLock lock(m_internal_mutex); return max_kbps; }; + { MutexAutoLock lock(m_internal_mutex); return max_kbps; }; const float getCurrentLossRateKB() - { JMutexAutoLock lock(m_internal_mutex); return cur_kbps_lost; }; + { MutexAutoLock lock(m_internal_mutex); return cur_kbps_lost; }; const float getMaxLossRateKB() - { JMutexAutoLock lock(m_internal_mutex); return max_kbps_lost; }; + { MutexAutoLock lock(m_internal_mutex); return max_kbps_lost; }; const float getCurrentIncomingRateKB() - { JMutexAutoLock lock(m_internal_mutex); return cur_incoming_kbps; }; + { MutexAutoLock lock(m_internal_mutex); return cur_incoming_kbps; }; const float getMaxIncomingRateKB() - { JMutexAutoLock lock(m_internal_mutex); return max_incoming_kbps; }; + { MutexAutoLock lock(m_internal_mutex); return max_incoming_kbps; }; const float getAvgDownloadRateKB() - { JMutexAutoLock lock(m_internal_mutex); return avg_kbps; }; + { MutexAutoLock lock(m_internal_mutex); return avg_kbps; }; const float getAvgLossRateKB() - { JMutexAutoLock lock(m_internal_mutex); return avg_kbps_lost; }; + { MutexAutoLock lock(m_internal_mutex); return avg_kbps_lost; }; const float getAvgIncomingRateKB() - { JMutexAutoLock lock(m_internal_mutex); return avg_incoming_kbps; }; + { MutexAutoLock lock(m_internal_mutex); return avg_incoming_kbps; }; const unsigned int getWindowSize() const { return window_size; }; void setWindowSize(unsigned int size) { window_size = size; }; private: - JMutex m_internal_mutex; + Mutex m_internal_mutex; int window_size; u16 next_incoming_seqnum; @@ -675,7 +675,7 @@ class Peer { }; virtual ~Peer() { - JMutexAutoLock usage_lock(m_exclusive_access_mutex); + MutexAutoLock usage_lock(m_exclusive_access_mutex); FATAL_ERROR_IF(m_usage != 0, "Reference counting failure"); }; @@ -692,15 +692,15 @@ class Peer { virtual bool getAddress(MTProtocols type, Address& toset) = 0; void ResetTimeout() - {JMutexAutoLock lock(m_exclusive_access_mutex); m_timeout_counter=0.0; }; + {MutexAutoLock lock(m_exclusive_access_mutex); m_timeout_counter=0.0; }; bool isTimedOut(float timeout); void setSentWithID() - { JMutexAutoLock lock(m_exclusive_access_mutex); m_has_sent_with_id = true; }; + { MutexAutoLock lock(m_exclusive_access_mutex); m_has_sent_with_id = true; }; bool hasSentWithID() - { JMutexAutoLock lock(m_exclusive_access_mutex); return m_has_sent_with_id; }; + { MutexAutoLock lock(m_exclusive_access_mutex); return m_has_sent_with_id; }; unsigned int m_increment_packets_remaining; unsigned int m_increment_bytes_remaining; @@ -744,7 +744,7 @@ class Peer { bool IncUseCount(); void DecUseCount(); - JMutex m_exclusive_access_mutex; + Mutex m_exclusive_access_mutex; bool m_pending_deletion; @@ -826,10 +826,10 @@ protected: unsigned int maxtransfer); float getResendTimeout() - { JMutexAutoLock lock(m_exclusive_access_mutex); return resend_timeout; } + { MutexAutoLock lock(m_exclusive_access_mutex); return resend_timeout; } void setResendTimeout(float timeout) - { JMutexAutoLock lock(m_exclusive_access_mutex); resend_timeout = timeout; } + { MutexAutoLock lock(m_exclusive_access_mutex); resend_timeout = timeout; } bool Ping(float dtime,SharedBuffer& data); Channel channels[CHANNEL_COUNT]; @@ -910,14 +910,14 @@ struct ConnectionEvent } }; -class ConnectionSendThread : public JThread { +class ConnectionSendThread : public Thread { public: friend class UDPPeer; ConnectionSendThread(unsigned int max_packet_size, float timeout); - void * Thread (); + void *run(); void Trigger(); @@ -961,7 +961,7 @@ private: unsigned int m_max_packet_size; float m_timeout; std::queue m_outgoing_queue; - JSemaphore m_send_sleep_semaphore; + Semaphore m_send_sleep_semaphore; unsigned int m_iteration_packets_avaialble; unsigned int m_max_commands_per_iteration; @@ -969,24 +969,24 @@ private: unsigned int m_max_packets_requeued; }; -class ConnectionReceiveThread : public JThread { +class ConnectionReceiveThread : public Thread { public: ConnectionReceiveThread(unsigned int max_packet_size); - void * Thread (); + void *run(); - void setParent(Connection* parent) { - assert(parent != NULL); // Pre-condition + void setParent(Connection *parent) { + assert(parent); // Pre-condition m_connection = parent; } private: - void receive (); + void receive(); // Returns next data from a buffer if possible // If found, returns true; if not, false. // If found, sets peer_id and dst - bool getFromBuffers (u16 &peer_id, SharedBuffer &dst); + bool getFromBuffers(u16 &peer_id, SharedBuffer &dst); bool checkIncomingBuffers(Channel *channel, u16 &peer_id, SharedBuffer &dst); @@ -1013,13 +1013,11 @@ public: friend class ConnectionSendThread; friend class ConnectionReceiveThread; - Connection(u32 protocol_id, u32 max_packet_size, float timeout, bool ipv6); Connection(u32 protocol_id, u32 max_packet_size, float timeout, bool ipv6, PeerHandler *peerhandler); ~Connection(); /* Interface */ - ConnectionEvent getEvent(); ConnectionEvent waitEvent(u32 timeout_ms); void putCommand(ConnectionCommand &c); @@ -1054,7 +1052,11 @@ protected: void PrintInfo(std::ostream &out); void PrintInfo(); - std::list getPeerIDs() { return m_peer_ids; } + std::list getPeerIDs() + { + MutexAutoLock peerlock(m_peers_mutex); + return m_peer_ids; + } UDPSocket m_udpSocket; MutexedQueue m_command_queue; @@ -1073,12 +1075,12 @@ private: std::map m_peers; std::list m_peer_ids; - JMutex m_peers_mutex; + Mutex m_peers_mutex; ConnectionSendThread m_sendThread; ConnectionReceiveThread m_receiveThread; - JMutex m_info_mutex; + Mutex m_info_mutex; // Backwards compatibility PeerHandler *m_bc_peerhandler; diff --git a/src/network/networkpacket.cpp b/src/network/networkpacket.cpp index ab1bda0c..720a851d 100644 --- a/src/network/networkpacket.cpp +++ b/src/network/networkpacket.cpp @@ -39,9 +39,9 @@ NetworkPacket::~NetworkPacket() m_data.clear(); } -void NetworkPacket::checkReadOffset(u32 from_offset) +void NetworkPacket::checkReadOffset(u32 from_offset, u32 field_size) { - if (from_offset >= m_datasize) { + if (from_offset + field_size > m_datasize) { std::stringstream ss; ss << "Reading outside packet (offset: " << from_offset << ", packet size: " << getSize() << ")"; @@ -65,7 +65,7 @@ void NetworkPacket::putRawPacket(u8 *data, u32 datasize, u16 peer_id) char* NetworkPacket::getString(u32 from_offset) { - checkReadOffset(from_offset); + checkReadOffset(from_offset, 0); return (char*)&m_data[from_offset]; } @@ -83,8 +83,9 @@ void NetworkPacket::putRawString(const char* src, u32 len) NetworkPacket& NetworkPacket::operator>>(std::string& dst) { + checkReadOffset(m_read_offset, 2); u16 strLen = readU16(&m_data[m_read_offset]); - m_read_offset += sizeof(u16); + m_read_offset += 2; dst.clear(); @@ -92,6 +93,8 @@ NetworkPacket& NetworkPacket::operator>>(std::string& dst) return *this; } + checkReadOffset(m_read_offset, strLen); + dst.reserve(strLen); dst.append((char*)&m_data[m_read_offset], strLen); @@ -102,8 +105,8 @@ NetworkPacket& NetworkPacket::operator>>(std::string& dst) NetworkPacket& NetworkPacket::operator<<(std::string src) { u16 msgsize = src.size(); - if (msgsize > 0xFFFF) { - msgsize = 0xFFFF; + if (msgsize > STRING_MAX_LEN) { + throw PacketError("String too long"); } *this << msgsize; @@ -116,8 +119,8 @@ NetworkPacket& NetworkPacket::operator<<(std::string src) void NetworkPacket::putLongString(std::string src) { u32 msgsize = src.size(); - if (msgsize > 0xFFFFFFFF) { - msgsize = 0xFFFFFFFF; + if (msgsize > LONG_STRING_MAX_LEN) { + throw PacketError("String too long"); } *this << msgsize; @@ -127,8 +130,9 @@ void NetworkPacket::putLongString(std::string src) NetworkPacket& NetworkPacket::operator>>(std::wstring& dst) { + checkReadOffset(m_read_offset, 2); u16 strLen = readU16(&m_data[m_read_offset]); - m_read_offset += sizeof(u16); + m_read_offset += 2; dst.clear(); @@ -136,6 +140,8 @@ NetworkPacket& NetworkPacket::operator>>(std::wstring& dst) return *this; } + checkReadOffset(m_read_offset, strLen * 2); + dst.reserve(strLen); for(u16 i=0; i>(std::wstring& dst) NetworkPacket& NetworkPacket::operator<<(std::wstring src) { u16 msgsize = src.size(); - if (msgsize > 0xFFFF) { - msgsize = 0xFFFF; + if (msgsize > WIDE_STRING_MAX_LEN) { + throw PacketError("String too long"); } *this << msgsize; @@ -165,13 +171,20 @@ NetworkPacket& NetworkPacket::operator<<(std::wstring src) std::string NetworkPacket::readLongString() { + checkReadOffset(m_read_offset, 4); u32 strLen = readU32(&m_data[m_read_offset]); - m_read_offset += sizeof(u32); + m_read_offset += 4; if (strLen == 0) { return ""; } + if (strLen > LONG_STRING_MAX_LEN) { + throw PacketError("String too long"); + } + + checkReadOffset(m_read_offset, strLen); + std::string dst; dst.reserve(strLen); @@ -184,114 +197,114 @@ std::string NetworkPacket::readLongString() NetworkPacket& NetworkPacket::operator>>(char& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 1); dst = readU8(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 1; return *this; } char NetworkPacket::getChar(u32 offset) { - checkReadOffset(offset); + checkReadOffset(offset, 1); return readU8(&m_data[offset]); } NetworkPacket& NetworkPacket::operator<<(char src) { - checkDataSize(); + checkDataSize(1); writeU8(&m_data[m_read_offset], src); - incrOffset(); + m_read_offset += 1; return *this; } NetworkPacket& NetworkPacket::operator<<(u8 src) { - checkDataSize(); + checkDataSize(1); writeU8(&m_data[m_read_offset], src); - incrOffset(); + m_read_offset += 1; return *this; } NetworkPacket& NetworkPacket::operator<<(bool src) { - checkDataSize(); + checkDataSize(1); writeU8(&m_data[m_read_offset], src); - incrOffset(); + m_read_offset += 1; return *this; } NetworkPacket& NetworkPacket::operator<<(u16 src) { - checkDataSize(); + checkDataSize(2); writeU16(&m_data[m_read_offset], src); - incrOffset(); + m_read_offset += 2; return *this; } NetworkPacket& NetworkPacket::operator<<(u32 src) { - checkDataSize(); + checkDataSize(4); writeU32(&m_data[m_read_offset], src); - incrOffset(); + m_read_offset += 4; return *this; } NetworkPacket& NetworkPacket::operator<<(u64 src) { - checkDataSize(); + checkDataSize(8); writeU64(&m_data[m_read_offset], src); - incrOffset(); + m_read_offset += 8; return *this; } NetworkPacket& NetworkPacket::operator<<(float src) { - checkDataSize(); + checkDataSize(4); writeF1000(&m_data[m_read_offset], src); - incrOffset(); + m_read_offset += 4; return *this; } NetworkPacket& NetworkPacket::operator>>(bool& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 1); dst = readU8(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 1; return *this; } NetworkPacket& NetworkPacket::operator>>(u8& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 1); dst = readU8(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 1; return *this; } u8 NetworkPacket::getU8(u32 offset) { - checkReadOffset(offset); + checkReadOffset(offset, 1); return readU8(&m_data[offset]); } @@ -302,85 +315,85 @@ u8* NetworkPacket::getU8Ptr(u32 from_offset) return NULL; } - checkReadOffset(from_offset); + checkReadOffset(from_offset, 1); return (u8*)&m_data[from_offset]; } NetworkPacket& NetworkPacket::operator>>(u16& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 2); dst = readU16(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 2; return *this; } u16 NetworkPacket::getU16(u32 from_offset) { - checkReadOffset(from_offset); + checkReadOffset(from_offset, 2); return readU16(&m_data[from_offset]); } NetworkPacket& NetworkPacket::operator>>(u32& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 4); dst = readU32(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 4; return *this; } NetworkPacket& NetworkPacket::operator>>(u64& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 8); dst = readU64(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 8; return *this; } NetworkPacket& NetworkPacket::operator>>(float& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 4); dst = readF1000(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 4; return *this; } NetworkPacket& NetworkPacket::operator>>(v2f& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 8); dst = readV2F1000(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 8; return *this; } NetworkPacket& NetworkPacket::operator>>(v3f& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 12); dst = readV3F1000(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 12; return *this; } NetworkPacket& NetworkPacket::operator>>(s16& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 2); dst = readS16(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 2; return *this; } @@ -392,11 +405,11 @@ NetworkPacket& NetworkPacket::operator<<(s16 src) NetworkPacket& NetworkPacket::operator>>(s32& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 4); dst = readS32(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 4; return *this; } @@ -408,29 +421,31 @@ NetworkPacket& NetworkPacket::operator<<(s32 src) NetworkPacket& NetworkPacket::operator>>(v3s16& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 6); dst = readV3S16(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 6; return *this; } NetworkPacket& NetworkPacket::operator>>(v2s32& dst) { + checkReadOffset(m_read_offset, 8); + dst = readV2S32(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 8; return *this; } NetworkPacket& NetworkPacket::operator>>(v3s32& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 12); dst = readV3S32(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 12; return *this; } @@ -474,21 +489,21 @@ NetworkPacket& NetworkPacket::operator<<(v3s32 src) NetworkPacket& NetworkPacket::operator>>(video::SColor& dst) { - checkReadOffset(m_read_offset); + checkReadOffset(m_read_offset, 4); dst = readARGB8(&m_data[m_read_offset]); - incrOffset(); + m_read_offset += 4; return *this; } NetworkPacket& NetworkPacket::operator<<(video::SColor src) { - checkDataSize(); + checkDataSize(4); writeU32(&m_data[m_read_offset], src.color); - incrOffset(); + m_read_offset += 4; return *this; } diff --git a/src/network/networkpacket.h b/src/network/networkpacket.h index fab1b621..e699f4c4 100644 --- a/src/network/networkpacket.h +++ b/src/network/networkpacket.h @@ -111,21 +111,16 @@ public: // Temp, we remove SharedBuffer when migration finished Buffer oldForgePacket(); private: - void checkReadOffset(u32 from_offset); + void checkReadOffset(u32 from_offset, u32 field_size); - template void checkDataSize() + inline void checkDataSize(u32 field_size) { - if (m_read_offset + sizeof(T) > m_datasize) { - m_datasize = m_read_offset + sizeof(T); + if (m_read_offset + field_size > m_datasize) { + m_datasize = m_read_offset + field_size; m_data.resize(m_datasize); } } - template void incrOffset() - { - m_read_offset += sizeof(T); - } - std::vector m_data; u32 m_datasize; u32 m_read_offset; diff --git a/src/network/networkprotocol.h b/src/network/networkprotocol.h index 0de366ca..c89d8009 100644 --- a/src/network/networkprotocol.h +++ b/src/network/networkprotocol.h @@ -129,9 +129,12 @@ with this program; if not, write to the Free Software Foundation, Inc., Add TOCLIENT_HELLO for presenting server to client after client presentation Add TOCLIENT_AUTH_ACCEPT to accept connection from client + Rename GENERIC_CMD_SET_ATTACHMENT to GENERIC_CMD_ATTACH_TO + PROTOCOL_VERSION 26: + Add TileDef tileable_horizontal, tileable_vertical flags */ -#define LATEST_PROTOCOL_VERSION 25 +#define LATEST_PROTOCOL_VERSION 26 // Server's supported network protocol range #define SERVER_PROTOCOL_VERSION_MIN 13 @@ -199,12 +202,12 @@ enum ToClientCommand TOCLIENT_ACCESS_DENIED = 0x0A, /* u8 reason - std::string custom reason (if reason == SERVER_ACCESSDENIED_CUSTOM_STRING) + std::string custom reason (if needed, otherwise "") + u8 (bool) reconnect */ TOCLIENT_BLOCKDATA = 0x20, //TODO: Multiple blocks TOCLIENT_ADDNODE = 0x21, /* - u16 command v3s16 position serialized mapnode u8 keep_metadata // Added in protocol version 22 @@ -251,7 +254,6 @@ enum ToClientCommand /* Sent as unreliable. - u16 command u16 number of player positions for each player: u16 peer_id @@ -267,7 +269,6 @@ enum ToClientCommand TOCLIENT_TIME_OF_DAY = 0x29, /* - u16 command u16 time (0-23999) Added in a later version: f1000 time_speed @@ -277,14 +278,12 @@ enum ToClientCommand TOCLIENT_CHAT_MESSAGE = 0x30, /* - u16 command u16 length wstring message */ TOCLIENT_ACTIVE_OBJECT_REMOVE_ADD = 0x31, /* - u16 command u16 count of removed objects for all removed objects { u16 id @@ -300,7 +299,6 @@ enum ToClientCommand TOCLIENT_ACTIVE_OBJECT_MESSAGES = 0x32, /* - u16 command for all objects { u16 id @@ -311,13 +309,11 @@ enum ToClientCommand TOCLIENT_HP = 0x33, /* - u16 command u8 hp */ TOCLIENT_MOVE_PLAYER = 0x34, /* - u16 command v3f1000 player position f1000 player pitch f1000 player yaw @@ -325,14 +321,12 @@ enum ToClientCommand TOCLIENT_ACCESS_DENIED_LEGACY = 0x35, /* - u16 command u16 reason_length wstring reason */ TOCLIENT_PLAYERITEM = 0x36, // Obsolete /* - u16 command u16 count of player items for all player items { u16 peer id @@ -343,14 +337,12 @@ enum ToClientCommand TOCLIENT_DEATHSCREEN = 0x37, /* - u16 command u8 bool set camera point target v3f1000 camera point target (to point the death cause or whatever) */ TOCLIENT_MEDIA = 0x38, /* - u16 command u16 total number of texture bunches u16 index of this bunch u32 number of files in this bunch @@ -366,21 +358,18 @@ enum ToClientCommand TOCLIENT_TOOLDEF = 0x39, /* - u16 command u32 length of the next item serialized ToolDefManager */ TOCLIENT_NODEDEF = 0x3a, /* - u16 command u32 length of the next item serialized NodeDefManager */ TOCLIENT_CRAFTITEMDEF = 0x3b, /* - u16 command u32 length of the next item serialized CraftiItemDefManager */ @@ -388,7 +377,6 @@ enum ToClientCommand TOCLIENT_ANNOUNCE_MEDIA = 0x3c, /* - u16 command u32 number of files for each texture { u16 length of name @@ -400,14 +388,12 @@ enum ToClientCommand TOCLIENT_ITEMDEF = 0x3d, /* - u16 command u32 length of next item serialized ItemDefManager */ TOCLIENT_PLAY_SOUND = 0x3f, /* - u16 command s32 sound_id u16 len u8[len] sound name @@ -420,13 +406,11 @@ enum ToClientCommand TOCLIENT_STOP_SOUND = 0x40, /* - u16 command s32 sound_id */ TOCLIENT_PRIVILEGES = 0x41, /* - u16 command u16 number of privileges for each privilege u16 len @@ -435,7 +419,6 @@ enum ToClientCommand TOCLIENT_INVENTORY_FORMSPEC = 0x42, /* - u16 command u32 len u8[len] formspec */ @@ -459,7 +442,6 @@ enum ToClientCommand TOCLIENT_MOVEMENT = 0x45, /* - u16 command f1000 movement_acceleration_default f1000 movement_acceleration_air f1000 movement_acceleration_fast @@ -476,7 +458,6 @@ enum ToClientCommand TOCLIENT_SPAWN_PARTICLE = 0x46, /* - u16 command v3f1000 pos v3f1000 velocity v3f1000 acceleration @@ -490,7 +471,6 @@ enum ToClientCommand TOCLIENT_ADD_PARTICLESPAWNER = 0x47, /* - u16 command u16 amount f1000 spawntime v3f1000 minpos @@ -512,13 +492,11 @@ enum ToClientCommand TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY = 0x48, /* - u16 command u16 id */ TOCLIENT_HUDADD = 0x49, /* - u16 command u32 id u8 type v2f1000 pos @@ -538,13 +516,11 @@ enum ToClientCommand TOCLIENT_HUDRM = 0x4a, /* - u16 command u32 id */ TOCLIENT_HUDCHANGE = 0x4b, /* - u16 command u32 id u8 stat [v2f1000 data | @@ -555,14 +531,12 @@ enum ToClientCommand TOCLIENT_HUD_SET_FLAGS = 0x4c, /* - u16 command u32 flags u32 mask */ TOCLIENT_HUD_SET_PARAM = 0x4d, /* - u16 command u16 param u16 len u8[len] value @@ -570,13 +544,11 @@ enum ToClientCommand TOCLIENT_BREATH = 0x4e, /* - u16 command u16 breath */ TOCLIENT_SET_SKY = 0x4f, /* - u16 command u8[4] color (ARGB) u8 len u8[len] type @@ -588,14 +560,12 @@ enum ToClientCommand TOCLIENT_OVERRIDE_DAY_NIGHT_RATIO = 0x50, /* - u16 command u8 do_override (boolean) u16 day-night ratio 0...65535 */ TOCLIENT_LOCAL_PLAYER_ANIMATIONS = 0x51, /* - u16 command v2s32 stand/idle v2s32 walk v2s32 dig @@ -605,14 +575,12 @@ enum ToClientCommand TOCLIENT_EYE_OFFSET = 0x52, /* - u16 command v3f1000 first v3f1000 third */ TOCLIENT_DELETE_PARTICLESPAWNER = 0x53, /* - u16 command u32 id */ @@ -620,7 +588,6 @@ enum ToClientCommand /* Belonging to AUTH_MECHANISM_LEGACY_PASSWORD and AUTH_MECHANISM_SRP. - u16 command std::string bytes_s std::string bytes_B */ @@ -731,7 +698,6 @@ enum ToServerCommand TOSERVER_SIGNTEXT = 0x30, // Old signs, obsolete /* - u16 command v3s16 blockpos s16 id u16 textlen @@ -745,14 +711,12 @@ enum ToServerCommand TOSERVER_CHAT_MESSAGE = 0x32, /* - u16 command u16 length wstring message */ TOSERVER_SIGNNODETEXT = 0x33, // obsolete /* - u16 command v3s16 p u16 textlen textdata @@ -769,7 +733,6 @@ enum ToServerCommand TOSERVER_DAMAGE = 0x35, /* - u16 command u8 amount */ @@ -814,14 +777,12 @@ enum ToServerCommand TOSERVER_REMOVED_SOUNDS = 0x3a, /* - u16 command u16 len s32[len] sound_id */ TOSERVER_NODEMETA_FIELDS = 0x3b, /* - u16 command v3s16 p u16 len u8[len] form name (reserved for future use) @@ -835,7 +796,6 @@ enum ToServerCommand TOSERVER_INVENTORY_FIELDS = 0x3c, /* - u16 command u16 len u8[len] form name (reserved for future use) u16 number of fields @@ -848,7 +808,6 @@ enum ToServerCommand TOSERVER_REQUEST_MEDIA = 0x40, /* - u16 command u16 number of files requested for each file { u16 length of name @@ -858,12 +817,11 @@ enum ToServerCommand TOSERVER_RECEIVED_MEDIA = 0x41, /* - u16 command + */ TOSERVER_BREATH = 0x42, /* - u16 command u16 breath */ @@ -934,6 +892,8 @@ enum AccessDeniedCode { SERVER_ACCESSDENIED_ALREADY_CONNECTED, SERVER_ACCESSDENIED_SERVER_FAIL, SERVER_ACCESSDENIED_CUSTOM_STRING, + SERVER_ACCESSDENIED_SHUTDOWN, + SERVER_ACCESSDENIED_CRASH, SERVER_ACCESSDENIED_MAX, }; @@ -951,8 +911,10 @@ const static std::string accessDeniedStrings[SERVER_ACCESSDENIED_MAX] = { "Too many users.", "Empty passwords are disallowed. Set a password and try again.", "Another client is connected with this name. If your client closed unexpectedly, try again in a minute.", - "Server authention failed. This is likely a server error." + "Server authentication failed. This is likely a server error.", "", + "Server shutting down.", + "This server has experienced an internal error. You will now be disconnected." }; -#endif +#endif \ No newline at end of file diff --git a/src/network/serverpackethandler.cpp b/src/network/serverpackethandler.cpp index b2ecbc79..dfc44380 100644 --- a/src/network/serverpackethandler.cpp +++ b/src/network/serverpackethandler.cpp @@ -103,7 +103,7 @@ void Server::handleCommand_Init(NetworkPacket* pkt) // Use the highest version supported by both u8 depl_serial_v = std::min(client_max, our_max); // If it's lower than the lowest supported, give up. - if (depl_serial_v < SER_FMT_VER_LOWEST) + if (depl_serial_v < SER_FMT_VER_LOWEST_READ) depl_serial_v = SER_FMT_VER_INVALID; if (depl_serial_v == SER_FMT_VER_INVALID) { @@ -263,6 +263,8 @@ void Server::handleCommand_Init(NetworkPacket* pkt) // Take care of default passwords. client->enc_pwd = getSRPVerifier(playerName, default_password); auth_mechs |= AUTH_MECHANISM_SRP; + // Create auth, but only on successful login + client->create_player_on_auth_success = true; } } @@ -345,7 +347,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) // Use the highest version supported by both int deployed = std::min(client_max, our_max); // If it's lower than the lowest supported, give up. - if (deployed < SER_FMT_VER_LOWEST) + if (deployed < SER_FMT_VER_LOWEST_READ) deployed = SER_FMT_VER_INVALID; if (deployed == SER_FMT_VER_INVALID) { @@ -356,7 +358,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) DenyAccess_Legacy(pkt->getPeerId(), std::wstring( L"Your client's version is not supported.\n" L"Server version is ") - + narrow_to_wide(g_version_string) + L"." + + utf8_to_wide(g_version_string) + L"." ); return; } @@ -408,15 +410,15 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) DenyAccess_Legacy(pkt->getPeerId(), std::wstring( L"Your client's version is not supported.\n" L"Server version is ") - + narrow_to_wide(g_version_string) + L",\n" + + utf8_to_wide(g_version_string) + L",\n" + L"server's PROTOCOL_VERSION is " - + narrow_to_wide(itos(SERVER_PROTOCOL_VERSION_MIN)) + + utf8_to_wide(itos(SERVER_PROTOCOL_VERSION_MIN)) + L"..." - + narrow_to_wide(itos(SERVER_PROTOCOL_VERSION_MAX)) + + utf8_to_wide(itos(SERVER_PROTOCOL_VERSION_MAX)) + L", client's PROTOCOL_VERSION is " - + narrow_to_wide(itos(min_net_proto_version)) + + utf8_to_wide(itos(min_net_proto_version)) + L"..." - + narrow_to_wide(itos(max_net_proto_version)) + + utf8_to_wide(itos(max_net_proto_version)) ); return; } @@ -428,13 +430,13 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) DenyAccess_Legacy(pkt->getPeerId(), std::wstring( L"Your client's version is not supported.\n" L"Server version is ") - + narrow_to_wide(g_version_string) + L",\n" + + utf8_to_wide(g_version_string) + L",\n" + L"server's PROTOCOL_VERSION (strict) is " - + narrow_to_wide(itos(LATEST_PROTOCOL_VERSION)) + + utf8_to_wide(itos(LATEST_PROTOCOL_VERSION)) + L", client's PROTOCOL_VERSION is " - + narrow_to_wide(itos(min_net_proto_version)) + + utf8_to_wide(itos(min_net_proto_version)) + L"..." - + narrow_to_wide(itos(max_net_proto_version)) + + utf8_to_wide(itos(max_net_proto_version)) ); return; } @@ -487,7 +489,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) << "tried to connect from " << addr_s << " " << "but it was disallowed for the following reason: " << reason << std::endl; - DenyAccess_Legacy(pkt->getPeerId(), narrow_to_wide(reason.c_str())); + DenyAccess_Legacy(pkt->getPeerId(), utf8_to_wide(reason.c_str())); return; } } @@ -566,8 +568,10 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) } if (given_password != checkpwd) { - actionstream << "Server: " << playername << " supplied wrong password" - << std::endl; + actionstream << "Server: User " << playername + << " at " << addr_s + << " supplied wrong password (auth mechanism: legacy)." + << std::endl; DenyAccess_Legacy(pkt->getPeerId(), L"Wrong password"); return; } @@ -576,7 +580,7 @@ void Server::handleCommand_Init_Legacy(NetworkPacket* pkt) static_cast(m_env->getPlayer(playername)); if (player && player->peer_id != 0) { - errorstream << "Server: " << playername << ": Failed to emerge player" + actionstream << "Server: " << playername << ": Failed to emerge player" << " (player allocated to an another client)" << std::endl; DenyAccess_Legacy(pkt->getPeerId(), L"Another client is connected with this " L"name. If your client closed unexpectedly, try again in " @@ -1151,7 +1155,7 @@ void Server::handleCommand_Damage(NetworkPacket* pkt) << std::endl; playersao->setHP(playersao->getHP() - damage); - SendPlayerHPOrDie(playersao->getPeerID(), playersao->getHP() == 0); + SendPlayerHPOrDie(playersao); } } @@ -1465,21 +1469,22 @@ void Server::handleCommand_Interact(NetworkPacket* pkt) NOTE: This can be used in the future to check if somebody is cheating, by checking the timing. */ + MapNode n(CONTENT_IGNORE); bool pos_ok; - n = m_env->getMap().getNodeNoEx(p_under, &pos_ok); - if (pos_ok) - n = m_env->getMap().getNodeNoEx(p_under, &pos_ok); + n = m_env->getMap().getNodeNoEx(p_under, &pos_ok); if (!pos_ok) { infostream << "Server: Not punching: Node not found." << " Adding block to emerge queue." << std::endl; - m_emerge->enqueueBlockEmerge(pkt->getPeerId(), getNodeBlockPos(p_above), false); + m_emerge->enqueueBlockEmerge(pkt->getPeerId(), + getNodeBlockPos(p_above), false); } if (n.getContent() != CONTENT_IGNORE) m_script->node_on_punch(p_under, n, playersao, pointed); + // Cheat prevention playersao->noCheatDigStart(p_under); } @@ -1510,14 +1515,12 @@ void Server::handleCommand_Interact(NetworkPacket* pkt) // If the object is a player and its HP changed if (src_original_hp != pointed_object->getHP() && pointed_object->getType() == ACTIVEOBJECT_TYPE_PLAYER) { - SendPlayerHPOrDie(((PlayerSAO*)pointed_object)->getPeerID(), - pointed_object->getHP() == 0); + SendPlayerHPOrDie((PlayerSAO *)pointed_object); } // If the puncher is a player and its HP changed - if (dst_origin_hp != playersao->getHP()) { - SendPlayerHPOrDie(playersao->getPeerID(), playersao->getHP() == 0); - } + if (dst_origin_hp != playersao->getHP()) + SendPlayerHPOrDie(playersao); } } // action == 0 @@ -1538,9 +1541,10 @@ void Server::handleCommand_Interact(NetworkPacket* pkt) MapNode n = m_env->getMap().getNodeNoEx(p_under, &pos_ok); if (!pos_ok) { infostream << "Server: Not finishing digging: Node not found." - << " Adding block to emerge queue." - << std::endl; - m_emerge->enqueueBlockEmerge(pkt->getPeerId(), getNodeBlockPos(p_above), false); + << " Adding block to emerge queue." + << std::endl; + m_emerge->enqueueBlockEmerge(pkt->getPeerId(), + getNodeBlockPos(p_above), false); } /* Cheat prevention */ @@ -1709,7 +1713,7 @@ void Server::handleCommand_Interact(NetworkPacket* pkt) Catch invalid actions */ else { - infostream << "WARNING: Server: Invalid action " + warningstream << "Server: Invalid action " << action << std::endl; } } @@ -1860,14 +1864,8 @@ void Server::handleCommand_FirstSrp(NetworkPacket* pkt) } std::string initial_ver_key; - std::string raw_default_password = g_settings->get("default_password"); - // If default_password is empty, allow any initial password - if (raw_default_password.length() == 0) { - initial_ver_key = encodeSRPVerifier(verification_key, salt); - } else { - initial_ver_key = getSRPVerifier(playername, raw_default_password); - } + initial_ver_key = encodeSRPVerifier(verification_key, salt); m_script->createAuth(playername, initial_ver_key); acceptAuth(pkt->getPeerId(), false); @@ -2066,13 +2064,26 @@ void Server::handleCommand_SrpBytesM(NetworkPacket* pkt) } else { actionstream << "Server: User " << client->getName() << " at " << getPeerAddress(pkt->getPeerId()).serializeString() - << " supplied wrong (SRP) password from address " - << getPeerAddress(pkt->getPeerId()).serializeString() - << "." << std::endl; + << " supplied wrong password (auth mechanism: SRP)." + << std::endl; DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_WRONG_PASSWORD); return; } } + if (client->create_player_on_auth_success) { + std::string playername = client->getName(); + m_script->createAuth(playername, client->enc_pwd); + + std::string checkpwd; // not used, but needed for passing something + if (!m_script->getAuth(playername, &checkpwd, NULL)) { + actionstream << "Server: " << playername << " cannot be authenticated" + << " (auth handler does not work?)" << std::endl; + DenyAccess(pkt->getPeerId(), SERVER_ACCESSDENIED_SERVER_FAIL); + return; + } + client->create_player_on_auth_success = false; + } + acceptAuth(pkt->getPeerId(), wantSudo); -} +} \ No newline at end of file diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 2800c5bc..c3b4ed05 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -65,7 +65,7 @@ void NodeBox::serialize(std::ostream &os, u16 protocol_version) const writeU16(os, fixed.size()); for(std::vector::const_iterator i = fixed.begin(); - i != fixed.end(); i++) + i != fixed.end(); ++i) { writeV3F1000(os, i->MinEdge); writeV3F1000(os, i->MaxEdge); @@ -120,7 +120,9 @@ void NodeBox::deSerialize(std::istream &is) void TileDef::serialize(std::ostream &os, u16 protocol_version) const { - if(protocol_version >= 17) + if (protocol_version >= 26) + writeU8(os, 2); + else if (protocol_version >= 17) writeU8(os, 1); else writeU8(os, 0); @@ -129,8 +131,12 @@ void TileDef::serialize(std::ostream &os, u16 protocol_version) const writeU16(os, animation.aspect_w); writeU16(os, animation.aspect_h); writeF1000(os, animation.length); - if(protocol_version >= 17) + if (protocol_version >= 17) writeU8(os, backface_culling); + if (protocol_version >= 26) { + writeU8(os, tileable_horizontal); + writeU8(os, tileable_vertical); + } } void TileDef::deSerialize(std::istream &is) @@ -141,10 +147,15 @@ void TileDef::deSerialize(std::istream &is) animation.aspect_w = readU16(is); animation.aspect_h = readU16(is); animation.length = readF1000(is); - if(version >= 1) + if (version >= 1) backface_culling = readU8(is); + if (version >= 2) { + tileable_horizontal = readU8(is); + tileable_vertical = readU8(is); + } } + /* SimpleSoundSpec serialization */ @@ -183,6 +194,7 @@ void ContentFeatures::reset() solidness = 2; visual_solidness = 0; backface_culling = true; + #endif has_on_construct = false; has_on_destruct = false; @@ -202,6 +214,7 @@ void ContentFeatures::reset() #ifndef SERVER for(u32 i = 0; i < 24; i++) mesh_ptr[i] = NULL; + minimap_color = video::SColor(0, 0, 0, 0); #endif visual_scale = 1.0; for(u32 i = 0; i < 6; i++) @@ -253,7 +266,7 @@ void ContentFeatures::serialize(std::ostream &os, u16 protocol_version) const os<first); writeS16(os, i->second); } @@ -640,7 +653,7 @@ content_t CNodeDefManager::set(const std::string &name, const ContentFeatures &d // Don't allow redefining ignore (but allow air and unknown) if (name == "ignore") { - infostream << "NodeDefManager: WARNING: Ignoring " + warningstream << "NodeDefManager: Ignoring " "CONTENT_IGNORE redefinition"< all = idef->getAll(); m_name_id_mapping_with_aliases.clear(); for (std::set::iterator - i = all.begin(); i != all.end(); i++) { + i = all.begin(); i != all.end(); ++i) { std::string name = *i; std::string convert_to = idef->getAlias(name); content_t id; @@ -766,7 +779,6 @@ void CNodeDefManager::applyTextureOverrides(const std::string &override_filepath } } - void CNodeDefManager::updateTextures(IGameDef *gamedef, void (*progress_callback)(void *progress_args, u32 progress, u32 max_progress), void *progress_callback_args) @@ -774,20 +786,20 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef, #ifndef SERVER infostream << "CNodeDefManager::updateTextures(): Updating " "textures in node definitions" << std::endl; - ITextureSource *tsrc = gamedef->tsrc(); IShaderSource *shdsrc = gamedef->getShaderSource(); scene::ISceneManager* smgr = gamedef->getSceneManager(); scene::IMeshManipulator* meshmanip = smgr->getMeshManipulator(); bool new_style_water = g_settings->getBool("new_style_water"); - bool new_style_leaves = g_settings->getBool("new_style_leaves"); bool connected_glass = g_settings->getBool("connected_glass"); bool opaque_water = g_settings->getBool("opaque_water"); bool enable_shaders = g_settings->getBool("enable_shaders"); bool enable_bumpmapping = g_settings->getBool("enable_bumpmapping"); bool enable_parallax_occlusion = g_settings->getBool("enable_parallax_occlusion"); bool enable_mesh_cache = g_settings->getBool("enable_mesh_cache"); + bool enable_minimap = g_settings->getBool("enable_minimap"); + std::string leaves_style = g_settings->get("leaves_style"); bool use_normal_texture = enable_shaders && (enable_bumpmapping || enable_parallax_occlusion); @@ -797,6 +809,10 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef, for (u32 i = 0; i < size; i++) { ContentFeatures *f = &m_content_features[i]; + // minimap pixel color - the average color of a texture + if (enable_minimap && f->tiledef[0].name != "") + f->minimap_color = tsrc->getTextureAverageColor(f->tiledef[0].name); + // Figure out the actual tiles to use TileDef tiledef[6]; for (u32 j = 0; j < 6; j++) { @@ -856,10 +872,18 @@ void CNodeDefManager::updateTextures(IGameDef *gamedef, f->visual_solidness = 1; break; case NDT_ALLFACES_OPTIONAL: - if (new_style_leaves) { + if (leaves_style == "fancy") { f->drawtype = NDT_ALLFACES; f->solidness = 0; f->visual_solidness = 1; + } else if (leaves_style == "simple") { + for (u32 j = 0; j < 6; j++) { + if (f->tiledef_special[j].name != "") + tiledef[j].name = f->tiledef_special[j].name; + } + f->drawtype = NDT_GLASSLIKE; + f->solidness = 0; + f->visual_solidness = 1; } else { f->drawtype = NDT_NORMAL; f->solidness = 2; @@ -984,9 +1008,11 @@ void CNodeDefManager::fillTileAttribs(ITextureSource *tsrc, TileSpec *tile, tile->alpha = alpha; tile->material_type = material_type; - // Normal texture - if (use_normal_texture) + // Normal texture and shader flags texture + if (use_normal_texture) { tile->normal_texture = tsrc->getNormalTexture(tiledef->name); + } + tile->flags_texture = tsrc->getShaderFlagsTexture(tile->normal_texture ? true : false); // Material flags tile->material_flags = 0; @@ -994,6 +1020,10 @@ void CNodeDefManager::fillTileAttribs(ITextureSource *tsrc, TileSpec *tile, tile->material_flags |= MATERIAL_FLAG_BACKFACE_CULLING; if (tiledef->animation.type == TAT_VERTICAL_FRAMES) tile->material_flags |= MATERIAL_FLAG_ANIMATION_VERTICAL_FRAMES; + if (tiledef->tileable_horizontal) + tile->material_flags |= MATERIAL_FLAG_TILEABLE_HORIZONTAL; + if (tiledef->tileable_vertical) + tile->material_flags |= MATERIAL_FLAG_TILEABLE_VERTICAL; // Animation parameters int frame_count = 1; @@ -1026,6 +1056,7 @@ void CNodeDefManager::fillTileAttribs(ITextureSource *tsrc, TileSpec *tile, frame.texture = tsrc->getTextureForMesh(os.str(), &frame.texture_id); if (tile->normal_texture) frame.normal_texture = tsrc->getNormalTexture(os.str()); + frame.flags_texture = tile->flags_texture; tile->frames[i] = frame; } } @@ -1081,12 +1112,12 @@ void CNodeDefManager::deSerialize(std::istream &is) // Check error conditions if (i == CONTENT_IGNORE || i == CONTENT_AIR || i == CONTENT_UNKNOWN) { - infostream << "NodeDefManager::deSerialize(): WARNING: " + warningstream << "NodeDefManager::deSerialize(): " "not changing builtin node " << i << std::endl; continue; } if (f.name == "") { - infostream << "NodeDefManager::deSerialize(): WARNING: " + warningstream << "NodeDefManager::deSerialize(): " "received empty name" << std::endl; continue; } @@ -1094,7 +1125,7 @@ void CNodeDefManager::deSerialize(std::istream &is) // Ignore aliases u16 existing_id; if (m_name_id_mapping.getId(f.name, existing_id) && i != existing_id) { - infostream << "NodeDefManager::deSerialize(): WARNING: " + warningstream << "NodeDefManager::deSerialize(): " "already defined with different ID: " << f.name << std::endl; continue; } @@ -1131,7 +1162,7 @@ void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version) const os<first); writeS16(os, i->second); } @@ -1179,7 +1210,7 @@ void ContentFeatures::serializeOld(std::ostream &os, u16 protocol_version) const os<first); writeS16(os, i->second); } @@ -1505,4 +1536,4 @@ bool NodeResolver::getIdsFromNrBacklog(std::vector *result_out, } return success; -} +} \ No newline at end of file diff --git a/src/nodedef.h b/src/nodedef.h index 3a4bd182..1f4b9849 100644 --- a/src/nodedef.h +++ b/src/nodedef.h @@ -63,6 +63,8 @@ enum ContentParamType2 CPT2_WALLMOUNTED, // Block level like FLOWINGLIQUID CPT2_LEVELED, + // 2D rotation for things like plants + CPT2_DEGROTATE, }; enum LiquidType @@ -113,6 +115,8 @@ struct TileDef { std::string name; bool backface_culling; // Takes effect only in special cases + bool tileable_horizontal; + bool tileable_vertical; struct{ enum TileAnimationType type; int aspect_w; // width for aspect ratio @@ -124,6 +128,8 @@ struct TileDef { name = ""; backface_culling = true; + tileable_horizontal = true; + tileable_vertical = true; animation.type = TAT_NONE; animation.aspect_w = 1; animation.aspect_h = 1; @@ -194,6 +200,7 @@ struct ContentFeatures std::string mesh; #ifndef SERVER scene::IMesh *mesh_ptr[24]; + video::SColor minimap_color; #endif float visual_scale; // Misc. scale parameter TileDef tiledef[6]; @@ -202,6 +209,7 @@ struct ContentFeatures // Post effect color, drawn when the camera is inside the node. video::SColor post_effect_color; + // Type of MapNode::param1 ContentParamType param_type; // Type of MapNode::param2 diff --git a/src/nodemetadata.cpp b/src/nodemetadata.cpp index c0c2de12..1e1dde92 100644 --- a/src/nodemetadata.cpp +++ b/src/nodemetadata.cpp @@ -30,9 +30,9 @@ with this program; if not, write to the Free Software Foundation, Inc., NodeMetadata */ -NodeMetadata::NodeMetadata(IGameDef *gamedef): +NodeMetadata::NodeMetadata(IItemDefManager *item_def_mgr): m_stringvars(), - m_inventory(new Inventory(gamedef->idef())) + m_inventory(new Inventory(item_def_mgr)) { } @@ -96,39 +96,39 @@ void NodeMetadataList::serialize(std::ostream &os) const for(std::map::const_iterator i = m_data.begin(); - i != m_data.end(); i++) + i != m_data.end(); ++i) { v3s16 p = i->first; NodeMetadata *data = i->second; - u16 p16 = p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X; + u16 p16 = p.Z * MAP_BLOCKSIZE * MAP_BLOCKSIZE + p.Y * MAP_BLOCKSIZE + p.X; writeU16(os, p16); data->serialize(os); } } -void NodeMetadataList::deSerialize(std::istream &is, IGameDef *gamedef) +void NodeMetadataList::deSerialize(std::istream &is, IItemDefManager *item_def_mgr) { clear(); u8 version = readU8(is); - if(version == 0){ + if (version == 0) { // Nothing return; } - if(version != 1){ - infostream<<__FUNCTION_NAME<<": version "<deSerialize(is); m_data[p] = data; } @@ -231,4 +230,3 @@ std::string NodeMetadata::resolveString(const std::string &str, } return str; } - diff --git a/src/nodemetadata.h b/src/nodemetadata.h index 3fa3b130..594f235c 100644 --- a/src/nodemetadata.h +++ b/src/nodemetadata.h @@ -35,12 +35,12 @@ with this program; if not, write to the Free Software Foundation, Inc., */ class Inventory; -class IGameDef; +class IItemDefManager; class NodeMetadata { public: - NodeMetadata(IGameDef *gamedef); + NodeMetadata(IItemDefManager *item_def_mgr); ~NodeMetadata(); void serialize(std::ostream &os) const; @@ -80,7 +80,7 @@ public: ~NodeMetadataList(); void serialize(std::ostream &os) const; - void deSerialize(std::istream &is, IGameDef *gamedef); + void deSerialize(std::istream &is, IItemDefManager *item_def_mgr); // Add all keys in this list to the vector keys std::vector getAllKeys(); @@ -98,4 +98,3 @@ private: }; #endif - diff --git a/src/nodetimer.cpp b/src/nodetimer.cpp index 73b8ef1d..00090f2a 100644 --- a/src/nodetimer.cpp +++ b/src/nodetimer.cpp @@ -45,9 +45,9 @@ void NodeTimer::deSerialize(std::istream &is) void NodeTimerList::serialize(std::ostream &os, u8 map_format_version) const { - if(map_format_version == 24){ + if (map_format_version == 24) { // Version 0 is a placeholder for "nothing to see here; go away." - if(m_data.empty()){ + if (m_data.empty()) { writeU8(os, 0); // version return; } @@ -55,18 +55,18 @@ void NodeTimerList::serialize(std::ostream &os, u8 map_format_version) const writeU16(os, m_data.size()); } - if(map_format_version >= 25){ - writeU8(os, 2+4+4); + if (map_format_version >= 25) { + writeU8(os, 2 + 4 + 4); // length of the data for a single timer writeU16(os, m_data.size()); } - for(std::map::const_iterator + for (std::map::const_iterator i = m_data.begin(); - i != m_data.end(); i++){ + i != m_data.end(); ++i) { v3s16 p = i->first; NodeTimer t = i->second; - u16 p16 = p.Z*MAP_BLOCKSIZE*MAP_BLOCKSIZE + p.Y*MAP_BLOCKSIZE + p.X; + u16 p16 = p.Z * MAP_BLOCKSIZE * MAP_BLOCKSIZE + p.Y * MAP_BLOCKSIZE + p.X; writeU16(os, p16); t.serialize(os); } @@ -75,7 +75,7 @@ void NodeTimerList::serialize(std::ostream &os, u8 map_format_version) const void NodeTimerList::deSerialize(std::istream &is, u8 map_format_version) { m_data.clear(); - + if(map_format_version == 24){ u8 timer_version = readU8(is); if(timer_version == 0) @@ -108,7 +108,7 @@ void NodeTimerList::deSerialize(std::istream &is, u8 map_format_version) if(t.timeout <= 0) { - infostream<<"WARNING: NodeTimerList::deSerialize(): " + warningstream<<"NodeTimerList::deSerialize(): " <<"invalid data at position" <<"("< NodeTimerList::step(float dtime) // Increment timers for(std::map::iterator i = m_data.begin(); - i != m_data.end(); i++){ + i != m_data.end(); ++i){ v3s16 p = i->first; NodeTimer t = i->second; t.elapsed += dtime; @@ -146,7 +146,7 @@ std::map NodeTimerList::step(float dtime) // Delete elapsed timers for(std::map::const_iterator i = elapsed_timers.begin(); - i != elapsed_timers.end(); i++){ + i != elapsed_timers.end(); ++i){ v3s16 p = i->first; m_data.erase(p); } diff --git a/src/noise.cpp b/src/noise.cpp index 82659347..2948fb76 100644 --- a/src/noise.cpp +++ b/src/noise.cpp @@ -90,6 +90,9 @@ u32 PcgRandom::next() u32 PcgRandom::range(u32 bound) { + // If the bound is 0, we cover the whole RNG's range + if (bound == 0) + return next(); /* If the bound is not a multiple of the RNG's range, it may cause bias, e.g. a RNG has a range from 0 to 3 and we take want a number 0 to 2. @@ -138,7 +141,7 @@ void PcgRandom::bytes(void *out, size_t len) *outb = r & 0xFF; outb++; bytes_left--; - r >>= 8; + r >>= CHAR_BIT; } } @@ -192,14 +195,6 @@ inline float biLinearInterpolation( { float tx = easeCurve(x); float ty = easeCurve(y); -#if 0 - return ( - v00 * (1 - tx) * (1 - ty) + - v10 * tx * (1 - ty) + - v01 * (1 - tx) * ty + - v11 * tx * ty - ); -#endif float u = linearInterpolation(v00, v10, tx); float v = linearInterpolation(v01, v11, tx); return linearInterpolation(u, v, ty); @@ -225,18 +220,6 @@ float triLinearInterpolation( float tx = easeCurve(x); float ty = easeCurve(y); float tz = easeCurve(z); -#if 0 - return ( - v000 * (1 - tx) * (1 - ty) * (1 - tz) + - v100 * tx * (1 - ty) * (1 - tz) + - v010 * (1 - tx) * ty * (1 - tz) + - v110 * tx * ty * (1 - tz) + - v001 * (1 - tx) * (1 - ty) * tz + - v101 * tx * (1 - ty) * tz + - v011 * (1 - tx) * ty * tz + - v111 * tx * ty * tz - ); -#endif float u = biLinearInterpolationNoEase(v000, v100, v010, v110, tx, ty); float v = biLinearInterpolationNoEase(v001, v101, v011, v111, tx, ty); return linearInterpolation(u, v, tz); @@ -252,33 +235,6 @@ float triLinearInterpolationNoEase( return linearInterpolation(u, v, z); } - -#if 0 -float noise2d_gradient(float x, float y, int seed) -{ - // Calculate the integer coordinates - int x0 = (x > 0.0 ? (int)x : (int)x - 1); - int y0 = (y > 0.0 ? (int)y : (int)y - 1); - // Calculate the remaining part of the coordinates - float xl = x - (float)x0; - float yl = y - (float)y0; - // Calculate random cosine lookup table indices for the integer corners. - // They are looked up as unit vector gradients from the lookup table. - int n00 = (int)((noise2d(x0, y0, seed)+1)*8); - int n10 = (int)((noise2d(x0+1, y0, seed)+1)*8); - int n01 = (int)((noise2d(x0, y0+1, seed)+1)*8); - int n11 = (int)((noise2d(x0+1, y0+1, seed)+1)*8); - // Make a dot product for the gradients and the positions, to get the values - float s = dotProduct(cos_lookup[n00], cos_lookup[(n00+12)%16], xl, yl); - float u = dotProduct(-cos_lookup[n10], cos_lookup[(n10+12)%16], 1.-xl, yl); - float v = dotProduct(cos_lookup[n01], -cos_lookup[(n01+12)%16], xl, 1.-yl); - float w = dotProduct(-cos_lookup[n11], -cos_lookup[(n11+12)%16], 1.-xl, 1.-yl); - // Interpolate between the values - return biLinearInterpolation(s,u,v,w,xl,yl); -} -#endif - - float noise2d_gradient(float x, float y, int seed, bool eased) { // Calculate the integer coordinates diff --git a/src/objdef.h b/src/objdef.h index ecb8e61a..0bdb33c6 100644 --- a/src/objdef.h +++ b/src/objdef.h @@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef OBJDEF_HEADER #define OBJDEF_HEADER +#include "basicmacros.h" #include "porting.h" class IGameDef; @@ -90,6 +91,9 @@ protected: INodeDefManager *m_ndef; std::vector m_objects; ObjDefType m_objtype; + +private: + DISABLE_CLASS_COPY(ObjDefManager); }; #endif diff --git a/src/object_properties.cpp b/src/object_properties.cpp index d104bd60..b845712d 100644 --- a/src/object_properties.cpp +++ b/src/object_properties.cpp @@ -42,7 +42,8 @@ ObjectProperties::ObjectProperties(): automatic_rotate(0), stepheight(0), automatic_face_movement_dir(false), - automatic_face_movement_dir_offset(0.0) + automatic_face_movement_dir_offset(0.0), + backface_culling(true) { textures.push_back("unknown_object.png"); colors.push_back(video::SColor(255,255,255,255)); @@ -74,6 +75,7 @@ std::string ObjectProperties::dump() os<<", is_visible="<::iterator i = m_particle_spawners.begin(); i != m_particle_spawners.end();) @@ -360,14 +360,14 @@ void ParticleManager::stepSpawners (float dtime) else { i->second->step(dtime, m_env); - i++; + ++i; } } } void ParticleManager::stepParticles (float dtime) { - JMutexAutoLock lock(m_particle_list_lock); + MutexAutoLock lock(m_particle_list_lock); for(std::vector::iterator i = m_particles.begin(); i != m_particles.end();) { @@ -380,15 +380,15 @@ void ParticleManager::stepParticles (float dtime) else { (*i)->step(dtime); - i++; + ++i; } } } void ParticleManager::clearAll () { - JMutexAutoLock lock(m_spawner_list_lock); - JMutexAutoLock lock2(m_particle_list_lock); + MutexAutoLock lock(m_spawner_list_lock); + MutexAutoLock lock2(m_particle_list_lock); for(std::map::iterator i = m_particle_spawners.begin(); i != m_particle_spawners.end();) @@ -411,7 +411,7 @@ void ParticleManager::handleParticleEvent(ClientEvent *event, IGameDef *gamedef, scene::ISceneManager* smgr, LocalPlayer *player) { if (event->type == CE_DELETE_PARTICLESPAWNER) { - JMutexAutoLock lock(m_spawner_list_lock); + MutexAutoLock lock(m_spawner_list_lock); if (m_particle_spawners.find(event->delete_particlespawner.id) != m_particle_spawners.end()) { @@ -425,7 +425,7 @@ void ParticleManager::handleParticleEvent(ClientEvent *event, IGameDef *gamedef, if (event->type == CE_ADD_PARTICLESPAWNER) { { - JMutexAutoLock lock(m_spawner_list_lock); + MutexAutoLock lock(m_spawner_list_lock); if (m_particle_spawners.find(event->add_particlespawner.id) != m_particle_spawners.end()) { @@ -465,7 +465,7 @@ void ParticleManager::handleParticleEvent(ClientEvent *event, IGameDef *gamedef, delete event->add_particlespawner.maxacc; { - JMutexAutoLock lock(m_spawner_list_lock); + MutexAutoLock lock(m_spawner_list_lock); m_particle_spawners.insert( std::pair( event->add_particlespawner.id, @@ -568,6 +568,6 @@ void ParticleManager::addNodeParticle(IGameDef* gamedef, scene::ISceneManager* s void ParticleManager::addParticle(Particle* toadd) { - JMutexAutoLock lock(m_particle_list_lock); + MutexAutoLock lock(m_particle_list_lock); m_particles.push_back(toadd); } diff --git a/src/particles.h b/src/particles.h index fb5bbf10..3f813a8a 100644 --- a/src/particles.h +++ b/src/particles.h @@ -190,8 +190,8 @@ private: std::map m_particle_spawners; ClientEnvironment* m_env; - JMutex m_particle_list_lock; - JMutex m_spawner_list_lock; + Mutex m_particle_list_lock; + Mutex m_spawner_list_lock; }; #endif diff --git a/src/pathfinder.cpp b/src/pathfinder.cpp index b4ca132a..73931bff 100644 --- a/src/pathfinder.cpp +++ b/src/pathfinder.cpp @@ -313,7 +313,7 @@ std::vector pathfinder::get_Path(ServerEnvironment* env, //finalize path std::vector full_path; for (std::vector::iterator i = path.begin(); - i != path.end(); i++) { + i != path.end(); ++i) { full_path.push_back(getIndexElement(*i).pos); } @@ -724,7 +724,7 @@ v3s16 pathfinder::get_dir_heuristic(std::vector& directions,path_gridnode for (std::vector::iterator iter = directions.begin(); iter != directions.end(); - iter ++) { + ++iter) { v3s16 pos1 = v3s16(srcpos.X + iter->X,0,srcpos.Z+iter->Z); @@ -749,7 +749,7 @@ v3s16 pathfinder::get_dir_heuristic(std::vector& directions,path_gridnode if (retdir != v3s16(0,0,0)) { for (std::vector::iterator iter = directions.begin(); iter != directions.end(); - iter ++) { + ++iter) { if(*iter == retdir) { DEBUG_OUT("Pathfinder: removing return direction" << std::endl); directions.erase(iter); @@ -1064,7 +1064,7 @@ void pathfinder::print_path(std::vector path) { unsigned int current = 0; for (std::vector::iterator i = path.begin(); - i != path.end(); i++) { + i != path.end(); ++i) { std::cout << std::setw(3) << current << ":" << PPOS((*i)) << std::endl; current++; } diff --git a/src/player.cpp b/src/player.cpp index 1568d6fa..5b0e6418 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "player.h" #include -#include "jthread/jmutexautolock.h" +#include "threading/mutex_auto_lock.h" #include "util/numeric.h" #include "hud.h" #include "constants.h" @@ -44,6 +44,7 @@ Player::Player(IGameDef *gamedef, const char *name): hp(PLAYER_MAX_HP), hurt_tilt_timer(0), hurt_tilt_strength(0), + protocol_version(0), peer_id(PEER_ID_INEXISTENT), keyPressed(0), // protected @@ -71,9 +72,11 @@ Player::Player(IGameDef *gamedef, const char *name): //"image[1,0.6;1,2;player.png]" "list[current_player;main;0,3.5;8,4;]" "list[current_player;craft;3,0;3,3;]" + "listring[]" "list[current_player;craftpreview;7,1;1,1;]"; - // Initialize movement settings at default values, so movement can work if the server fails to send them + // Initialize movement settings at default values, so movement can work + // if the server fails to send them movement_acceleration_default = 3 * BS; movement_acceleration_air = 2 * BS; movement_acceleration_fast = 10 * BS; @@ -95,9 +98,10 @@ Player::Player(IGameDef *gamedef, const char *name): physics_override_sneak = true; physics_override_sneak_glitch = true; - hud_flags = HUD_FLAG_HOTBAR_VISIBLE | HUD_FLAG_HEALTHBAR_VISIBLE | - HUD_FLAG_CROSSHAIR_VISIBLE | HUD_FLAG_WIELDITEM_VISIBLE | - HUD_FLAG_BREATHBAR_VISIBLE; + hud_flags = + HUD_FLAG_HOTBAR_VISIBLE | HUD_FLAG_HEALTHBAR_VISIBLE | + HUD_FLAG_CROSSHAIR_VISIBLE | HUD_FLAG_WIELDITEM_VISIBLE | + HUD_FLAG_BREATHBAR_VISIBLE | HUD_FLAG_MINIMAP_VISIBLE; hud_hotbar_itemcount = HUD_HOTBAR_ITEMCOUNT_DEFAULT; } @@ -118,31 +122,12 @@ void Player::accelerateHorizontal(v3f target_speed, f32 max_increase) f32 dl = d_wanted.getLength(); if(dl > max_increase) dl = max_increase; - + v3f d = d_wanted.normalize() * dl; m_speed.X += d.X; m_speed.Z += d.Z; -#if 0 // old code - if(m_speed.X < target_speed.X - max_increase) - m_speed.X += max_increase; - else if(m_speed.X > target_speed.X + max_increase) - m_speed.X -= max_increase; - else if(m_speed.X < target_speed.X) - m_speed.X = target_speed.X; - else if(m_speed.X > target_speed.X) - m_speed.X = target_speed.X; - - if(m_speed.Z < target_speed.Z - max_increase) - m_speed.Z += max_increase; - else if(m_speed.Z > target_speed.Z + max_increase) - m_speed.Z -= max_increase; - else if(m_speed.Z < target_speed.Z) - m_speed.Z = target_speed.Z; - else if(m_speed.Z > target_speed.Z) - m_speed.Z = target_speed.Z; -#endif } // Vertical acceleration (Y), X and Z directions are ignored @@ -159,16 +144,6 @@ void Player::accelerateVertical(v3f target_speed, f32 max_increase) m_speed.Y += d_wanted; -#if 0 // old code - if(m_speed.Y < target_speed.Y - max_increase) - m_speed.Y += max_increase; - else if(m_speed.Y > target_speed.Y + max_increase) - m_speed.Y -= max_increase; - else if(m_speed.Y < target_speed.Y) - m_speed.Y = target_speed.Y; - else if(m_speed.Y > target_speed.Y) - m_speed.Y = target_speed.Y; -#endif } v3s16 Player::getLightPosition() const @@ -242,7 +217,7 @@ void Player::deSerialize(std::istream &is, std::string playername) u32 Player::addHud(HudElement *toadd) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); u32 id = getFreeHudID(); @@ -256,7 +231,7 @@ u32 Player::addHud(HudElement *toadd) HudElement* Player::getHud(u32 id) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); if (id < hud.size()) return hud[id]; @@ -266,7 +241,7 @@ HudElement* Player::getHud(u32 id) HudElement* Player::removeHud(u32 id) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); HudElement* retval = NULL; if (id < hud.size()) { @@ -278,7 +253,7 @@ HudElement* Player::removeHud(u32 id) void Player::clearHud() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); while(!hud.empty()) { delete hud.back(); diff --git a/src/player.h b/src/player.h index 084bfa65..bb22ee00 100644 --- a/src/player.h +++ b/src/player.h @@ -23,7 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes_bloated.h" #include "inventory.h" #include "constants.h" // BS -#include "jthread/jmutex.h" +#include "threading/mutex.h" #include #define PLAYERNAME_SIZE 20 @@ -130,13 +130,8 @@ public: v3f getEyeOffset() { - // This is at the height of the eyes of the current figure - // return v3f(0, BS*1.5, 0); - // This is more like in minecraft - if(camera_barely_in_ceiling) - return v3f(0,BS*1.5,0); - else - return v3f(0,BS*1.625,0); + float eye_height = camera_barely_in_ceiling ? 1.5f : 1.625f; + return v3f(0, BS * eye_height, 0); } v3f getEyePosition() @@ -197,12 +192,13 @@ public: return (m_yaw + 90.) * core::DEGTORAD; } - const char * getName() const + const char *getName() const { return m_name; } - core::aabbox3d getCollisionbox() { + core::aabbox3d getCollisionbox() + { return m_collisionbox; } @@ -215,62 +211,91 @@ public: return size; } - void setHotbarItemcount(s32 hotbar_itemcount) { + void setHotbarItemcount(s32 hotbar_itemcount) + { hud_hotbar_itemcount = hotbar_itemcount; } - s32 getHotbarItemcount() { + + s32 getHotbarItemcount() + { return hud_hotbar_itemcount; } - void setHotbarImage(std::string name) { + + void setHotbarImage(const std::string &name) + { hud_hotbar_image = name; } - std::string getHotbarImage() { + + std::string getHotbarImage() + { return hud_hotbar_image; } - void setHotbarSelectedImage(std::string name) { + + void setHotbarSelectedImage(const std::string &name) + { hud_hotbar_selected_image = name; } + std::string getHotbarSelectedImage() { return hud_hotbar_selected_image; } void setSky(const video::SColor &bgcolor, const std::string &type, - const std::vector ¶ms) { + const std::vector ¶ms) + { m_sky_bgcolor = bgcolor; m_sky_type = type; m_sky_params = params; } + void getSky(video::SColor *bgcolor, std::string *type, - std::vector *params) { + std::vector *params) + { *bgcolor = m_sky_bgcolor; *type = m_sky_type; *params = m_sky_params; } - void overrideDayNightRatio(bool do_override, float ratio) { + + void overrideDayNightRatio(bool do_override, float ratio) + { m_day_night_ratio_do_override = do_override; m_day_night_ratio = ratio; } - void getDayNightRatio(bool *do_override, float *ratio) { + + void getDayNightRatio(bool *do_override, float *ratio) + { *do_override = m_day_night_ratio_do_override; *ratio = m_day_night_ratio; } - void setLocalAnimations(v2s32 frames[4], float frame_speed) { + + void setLocalAnimations(v2s32 frames[4], float frame_speed) + { for (int i = 0; i < 4; i++) local_animations[i] = frames[i]; local_animation_speed = frame_speed; } - void getLocalAnimations(v2s32 *frames, float *frame_speed) { + + void getLocalAnimations(v2s32 *frames, float *frame_speed) + { for (int i = 0; i < 4; i++) frames[i] = local_animations[i]; *frame_speed = local_animation_speed; } virtual bool isLocal() const - { return false; } + { + return false; + } + virtual PlayerSAO *getPlayerSAO() - { return NULL; } + { + return NULL; + } + virtual void setPlayerSAO(PlayerSAO *sao) - { FATAL_ERROR("FIXME"); } + { + FATAL_ERROR("FIXME"); + } /* serialize() writes a bunch of text that can contain @@ -337,6 +362,7 @@ public: float hurt_tilt_timer; float hurt_tilt_strength; + u16 protocol_version; u16 peer_id; std::string inventory_formspec; @@ -387,7 +413,7 @@ private: // Protect some critical areas // hud for example can be modified by EmergeThread // and ServerThread - JMutex m_mutex; + Mutex m_mutex; }; diff --git a/src/porting.cpp b/src/porting.cpp index f623ad68..07ceebc2 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -75,13 +75,13 @@ bool * signal_handler_killstatus(void) void sigint_handler(int sig) { - if(!g_killed) { - dstream<= 702106)) \ - || defined(__linux) || defined(linux) - - cpu_set_t cpuset; - - CPU_ZERO(&cpuset); - CPU_SET(pnumber, &cpuset); - return pthread_setaffinity_np(tid, sizeof(cpuset), &cpuset) == 0; - -#elif defined(__sun) || defined(sun) - - return processor_bind(P_LWPID, MAKE_LWPID_PTHREAD(tid), - pnumber, NULL) == 0; - -#elif defined(_AIX) - - return bindprocessor(BINDTHREAD, (tid_t)tid, pnumber) == 0; - -#elif defined(__hpux) || defined(hpux) - - pthread_spu_t answer; - - return pthread_processor_bind_np(PTHREAD_BIND_ADVISORY_NP, - &answer, pnumber, tid) == 0; - -#elif defined(__APPLE__) - - struct thread_affinity_policy tapol; - - thread_port_t threadport = pthread_mach_thread_np(tid); - tapol.affinity_tag = pnumber + 1; - return thread_policy_set(threadport, THREAD_AFFINITY_POLICY, - (thread_policy_t)&tapol, THREAD_AFFINITY_POLICY_COUNT) == KERN_SUCCESS; - -#else - - return false; - -#endif -} -#endif - -bool threadSetPriority(threadid_t tid, int prio) -{ -#if defined(_WIN32) - - HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, 0, tid); - if (!hThread) - return false; - - bool success = SetThreadPriority(hThread, prio) != 0; - - CloseHandle(hThread); - return success; - -#else - - struct sched_param sparam; - int policy; - - if (pthread_getschedparam(tid, &policy, &sparam) != 0) - return false; - - int min = sched_get_priority_min(policy); - int max = sched_get_priority_max(policy); - - sparam.sched_priority = min + prio * (max - min) / THREAD_PRIORITY_HIGHEST; - return pthread_setschedparam(tid, policy, &sparam) == 0; - -#endif -} - - /* Path mangler */ @@ -260,6 +136,8 @@ bool threadSetPriority(threadid_t tid, int prio) // Default to RUN_IN_PLACE style relative paths std::string path_share = ".."; std::string path_user = ".."; +std::string path_locale = path_share + DIR_DELIM + "locale"; + std::string getDataPath(const char *subpath) { @@ -523,14 +401,14 @@ bool setSystemPaths() const std::string &trypath = *i; if (!fs::PathExists(trypath) || !fs::PathExists(trypath + DIR_DELIM + "builtin")) { - dstream << "WARNING: system-wide share not found at \"" + warningstream << "system-wide share not found at \"" << trypath << "\""<< std::endl; continue; } // Warn if was not the first alternative if (i != trylist.begin()) { - dstream << "WARNING: system-wide share found at \"" + warningstream << "system-wide share found at \"" << trypath << "\"" << std::endl; } @@ -559,7 +437,7 @@ bool setSystemPaths() TRUE, (UInt8 *)path, PATH_MAX)) { path_share = std::string(path); } else { - dstream << "WARNING: Could not determine bundle resource path" << std::endl; + warningstream << "Could not determine bundle resource path" << std::endl; } CFRelease(resources_url); @@ -627,7 +505,6 @@ void initializePaths() path_share = execpath; path_user = execpath; } - #else infostream << "Using system-wide paths (NOT RUN_IN_PLACE)" << std::endl; @@ -638,6 +515,32 @@ void initializePaths() infostream << "Detected share path: " << path_share << std::endl; infostream << "Detected user path: " << path_user << std::endl; + + bool found_localedir = false; +#ifdef STATIC_LOCALEDIR + if (STATIC_LOCALEDIR[0] && fs::PathExists(STATIC_LOCALEDIR)) { + found_localedir = true; + path_locale = STATIC_LOCALEDIR; + infostream << "Using locale directory " << STATIC_LOCALEDIR << std::endl; + } else { + path_locale = getDataPath("locale"); + if (fs::PathExists(path_locale)) { + found_localedir = true; + infostream << "Using in-place locale directory " << path_locale + << " even though a static one was provided " + << "(RUN_IN_PLACE or CUSTOM_LOCALEDIR)." << std::endl; + } + } +#else + path_locale = getDataPath("locale"); + if (fs::PathExists(path_locale)) { + found_localedir = true; + } +#endif + if (!found_localedir) { + errorstream << "Couldn't find a locale directory!" << std::endl; + } + } @@ -749,25 +652,23 @@ const char *getVideoDriverFriendlyName(irr::video::E_DRIVER_TYPE type) static float calcDisplayDensity() { - const char* current_display = getenv("DISPLAY"); + const char *current_display = getenv("DISPLAY"); if (current_display != NULL) { - Display * x11display = XOpenDisplay(current_display); + Display *x11display = XOpenDisplay(current_display); - if (x11display != NULL) { - /* try x direct */ - float dpi_height = - floor(DisplayHeight(x11display, 0) / - (DisplayHeightMM(x11display, 0) * 0.039370) + 0.5); - float dpi_width = - floor(DisplayWidth(x11display, 0) / - (DisplayWidthMM(x11display, 0) * 0.039370) +0.5); + if (x11display != NULL) { + /* try x direct */ + float dpi_height = floor(DisplayHeight(x11display, 0) / + (DisplayHeightMM(x11display, 0) * 0.039370) + 0.5); + float dpi_width = floor(DisplayWidth(x11display, 0) / + (DisplayWidthMM(x11display, 0) * 0.039370) + 0.5); - XCloseDisplay(x11display); + XCloseDisplay(x11display); - return std::max(dpi_height,dpi_width) / 96.0; - } + return std::max(dpi_height,dpi_width) / 96.0; } + } /* return manually specified dpi */ return g_settings->getFloat("screen_dpi")/96.0; diff --git a/src/porting.h b/src/porting.h index 5e459d4f..feaa97d1 100644 --- a/src/porting.h +++ b/src/porting.h @@ -60,32 +60,11 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include //for uintptr_t -#if (defined(linux) || defined(__linux) || defined(__GNU__)) && !defined(_GNU_SOURCE) + #if (defined(linux) || defined(__linux) || defined(__GNU__)) && !defined(_GNU_SOURCE) #define _GNU_SOURCE #endif - #include - - #ifdef __FreeBSD__ - #include - typedef cpuset_t cpu_set_t; - #elif defined(__sun) || defined(sun) - #include - #include - #elif defined(_AIX) - #include - #elif __APPLE__ - #include - #include - #endif - #define sleep_ms(x) usleep(x*1000) - - #define THREAD_PRIORITY_LOWEST 0 - #define THREAD_PRIORITY_BELOW_NORMAL 1 - #define THREAD_PRIORITY_NORMAL 2 - #define THREAD_PRIORITY_ABOVE_NORMAL 3 - #define THREAD_PRIORITY_HIGHEST 4 #endif #ifdef _MSC_VER @@ -129,6 +108,15 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #endif +#ifndef _WIN32 // Posix + #include + #include + #if defined(__MACH__) && defined(__APPLE__) + #include + #include + #endif +#endif + namespace porting { @@ -154,6 +142,11 @@ extern std::string path_share; */ extern std::string path_user; +/* + Path to gettext locale files +*/ +extern std::string path_locale; + /* Get full path of stuff in data directory. Example: "stone.png" -> "../data/stone.png" @@ -161,25 +154,10 @@ extern std::string path_user; std::string getDataPath(const char *subpath); /* - Initialize path_share and path_user. + Initialize path_*. */ void initializePaths(); -/* - Get number of online processors in the system. -*/ -int getNumberOfProcessors(); - -/* - Set a thread's affinity to a particular processor. -*/ -bool threadBindToProcessor(threadid_t tid, int pnumber); - -/* - Set a thread's priority. -*/ -bool threadSetPriority(threadid_t tid, int prio); - /* Return system information e.g. "Linux/3.12.7 x86_64" @@ -194,10 +172,6 @@ void initIrrlicht(irr::IrrlichtDevice * ); Overflow can occur at any value higher than 10000000. */ #ifdef _WIN32 // Windows -#ifndef _WIN32_WINNT - #define _WIN32_WINNT 0x0501 -#endif - #include inline u32 getTimeS() { @@ -226,12 +200,6 @@ void initIrrlicht(irr::IrrlichtDevice * ); } #else // Posix -#include -#include -#if defined(__MACH__) && defined(__APPLE__) -#include -#include -#endif inline u32 getTimeS() { @@ -311,59 +279,6 @@ inline u32 getDeltaMs(u32 old_time_ms, u32 new_time_ms) } } -#if defined(linux) || defined(__linux) - #include - - inline void setThreadName(const char *name) { - /* It would be cleaner to do this with pthread_setname_np, - * which was added to glibc in version 2.12, but some major - * distributions are still runing 2.11 and previous versions. - */ - prctl(PR_SET_NAME, name); - } -#elif defined(__FreeBSD__) || defined(__OpenBSD__) - #include - #include - - inline void setThreadName(const char *name) { - pthread_set_name_np(pthread_self(), name); - } -#elif defined(__NetBSD__) - #include - - inline void setThreadName(const char *name) { - pthread_setname_np(pthread_self(), name); - } -#elif defined(_MSC_VER) - typedef struct tagTHREADNAME_INFO { - 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; - - inline void setThreadName(const char *name) { - THREADNAME_INFO info; - info.dwType = 0x1000; - info.szName = name; - info.dwThreadID = -1; - info.dwFlags = 0; - __try { - RaiseException(0x406D1388, 0, sizeof(info) / sizeof(DWORD), (ULONG_PTR *) &info); - } __except (EXCEPTION_CONTINUE_EXECUTION) {} - } -#elif defined(__APPLE__) - #include - - inline void setThreadName(const char *name) { - pthread_setname_np(name); - } -#elif defined(_WIN32) || defined(__GNU__) - inline void setThreadName(const char* name) {} -#else - #warning "Unrecognized platform, thread names will not be available." - inline void setThreadName(const char* name) {} -#endif #ifndef SERVER float getDisplayDensity(); diff --git a/src/porting_android.cpp b/src/porting_android.cpp index 68210e0e..7d2e16f4 100644 --- a/src/porting_android.cpp +++ b/src/porting_android.cpp @@ -21,13 +21,17 @@ with this program; if not, write to the Free Software Foundation, Inc., #error This file may only be compiled for android! #endif +#include "util/numeric.h" #include "porting.h" #include "porting_android.h" +#include "threading/thread.h" #include "config.h" #include "filesys.h" #include "log.h" + #include -#include +#include +#include #ifdef GPROF #include "prof.h" @@ -40,32 +44,24 @@ void android_main(android_app *app) int retval = 0; porting::app_global = app; - porting::setThreadName("MainThread"); + Thread::setName("Main"); try { app_dummy(); - char argv[] = PROJECT_NAME; - retval = main(1, (char **)&argv); - } - catch(BaseException e) { - std::stringstream msg; - msg << "Exception handled by main: " << e.what(); - const char* message = msg.str().c_str(); - __android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME, "%s", message); - errorstream << msg << std::endl; + char *argv[] = {strdup(PROJECT_NAME), NULL}; + main(ARRLEN(argv) - 1, argv); + free(argv[0]); + } catch (std::exception &e) { + errorstream << "Uncaught exception in main thread: " << e.what() << std::endl; retval = -1; - } - catch(...) { - __android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME, - "Some exception occured"); + } catch (...) { errorstream << "Uncaught exception in main thread!" << std::endl; retval = -1; } porting::cleanupAndroid(); - errorstream << "Shutting down minetest." << std::endl; - - exit(0); + infostream << "Shutting down." << std::endl; + exit(retval); } /* handler for finished message box input */ @@ -139,7 +135,7 @@ void initAndroid() JavaVM *jvm = app_global->activity->vm; JavaVMAttachArgs lJavaVMAttachArgs; lJavaVMAttachArgs.version = JNI_VERSION_1_6; - lJavaVMAttachArgs.name = "MinetestNativeThread"; + lJavaVMAttachArgs.name = PROJECT_NAME_C "NativeThread"; lJavaVMAttachArgs.group = NULL; #ifdef NDEBUG // This is a ugly hack as arm v7a non debuggable builds crash without this @@ -160,7 +156,7 @@ void initAndroid() #ifdef GPROF /* in the start-up code */ - __android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME, + __android_log_print(ANDROID_LOG_ERROR, PROJECT_NAME_C, "Initializing GPROF profiler"); monstartup("libminetest.so"); #endif @@ -202,8 +198,8 @@ void setExternalStorageDir(JNIEnv* lJNIEnv) lJNIEnv->ReleaseStringUTFChars(StringPath, externalPath); path_storage = userPath; - path_user = userPath + DIR_DELIM + PROJECT_NAME; - path_share = userPath + DIR_DELIM + PROJECT_NAME; + path_user = userPath + DIR_DELIM + PROJECT_NAME_C; + path_share = userPath + DIR_DELIM + PROJECT_NAME_C; } void showInputDialog(const std::string& acceptButton, const std::string& hint, @@ -256,7 +252,7 @@ std::string getInputDialogValue() return text; } -#if not defined(SERVER) +#ifndef SERVER float getDisplayDensity() { static bool firstrun = true; @@ -306,5 +302,5 @@ v2u32 getDisplaySize() } return retval; } -#endif //SERVER +#endif // ndef SERVER } diff --git a/src/profiler.h b/src/profiler.h index 24bc3955..3abf1276 100644 --- a/src/profiler.h +++ b/src/profiler.h @@ -24,8 +24,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include -#include "jthread/jmutex.h" -#include "jthread/jmutexautolock.h" +#include "threading/mutex.h" +#include "threading/mutex_auto_lock.h" #include "util/timetaker.h" #include "util/numeric.h" // paging() #include "debug.h" // assert() @@ -49,7 +49,7 @@ public: void add(const std::string &name, float value) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); { /* No average shall have been used; mark add used as -2 */ std::map::iterator n = m_avgcounts.find(name); @@ -72,7 +72,7 @@ public: void avg(const std::string &name, float value) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); int &count = m_avgcounts[name]; assert(count != -2); @@ -82,7 +82,7 @@ public: void clear() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); for(std::map::iterator i = m_data.begin(); i != m_data.end(); ++i) @@ -114,7 +114,7 @@ public: void printPage(std::ostream &o, u32 page, u32 pagecount) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); u32 minindex, maxindex; paging(m_data.size(), page, pagecount, minindex, maxindex); @@ -159,7 +159,7 @@ public: void graphAdd(const std::string &id, float value) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); std::map::iterator i = m_graphvalues.find(id); if(i == m_graphvalues.end()) @@ -169,20 +169,20 @@ public: } void graphGet(GraphValues &result) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); result = m_graphvalues; m_graphvalues.clear(); } void remove(const std::string& name) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); m_avgcounts.erase(name); m_data.erase(name); } private: - JMutex m_mutex; + Mutex m_mutex; std::map m_data; std::map m_avgcounts; std::map m_graphvalues; diff --git a/src/quicktune.cpp b/src/quicktune.cpp index e9f43705..db4cd67d 100644 --- a/src/quicktune.cpp +++ b/src/quicktune.cpp @@ -18,8 +18,8 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "quicktune.h" -#include "jthread/jmutex.h" -#include "jthread/jmutexautolock.h" +#include "threading/mutex.h" +#include "threading/mutex_auto_lock.h" #include "util/string.h" std::string QuicktuneValue::getString() @@ -49,12 +49,12 @@ void QuicktuneValue::relativeAdd(float amount) static std::map g_values; static std::vector g_names; -JMutex *g_mutex = NULL; +Mutex *g_mutex = NULL; static void makeMutex() { if(!g_mutex){ - g_mutex = new JMutex(); + g_mutex = new Mutex(); } } @@ -66,7 +66,7 @@ std::vector getQuicktuneNames() QuicktuneValue getQuicktuneValue(const std::string &name) { makeMutex(); - JMutexAutoLock lock(*g_mutex); + MutexAutoLock lock(*g_mutex); std::map::iterator i = g_values.find(name); if(i == g_values.end()){ QuicktuneValue val; @@ -79,7 +79,7 @@ QuicktuneValue getQuicktuneValue(const std::string &name) void setQuicktuneValue(const std::string &name, const QuicktuneValue &val) { makeMutex(); - JMutexAutoLock lock(*g_mutex); + MutexAutoLock lock(*g_mutex); g_values[name] = val; g_values[name].modified = true; } @@ -87,7 +87,7 @@ void setQuicktuneValue(const std::string &name, const QuicktuneValue &val) void updateQuicktuneValue(const std::string &name, QuicktuneValue &val) { makeMutex(); - JMutexAutoLock lock(*g_mutex); + MutexAutoLock lock(*g_mutex); std::map::iterator i = g_values.find(name); if(i == g_values.end()){ g_values[name] = val; diff --git a/src/rollback.cpp b/src/rollback.cpp index 7d7a5a03..124664fe 100644 --- a/src/rollback.cpp +++ b/src/rollback.cpp @@ -107,6 +107,8 @@ RollbackManager::RollbackManager(const std::string & world_path, RollbackManager::~RollbackManager() { + flush(); + SQLOK(sqlite3_finalize(stmt_insert)); SQLOK(sqlite3_finalize(stmt_replace)); SQLOK(sqlite3_finalize(stmt_select)); @@ -240,8 +242,7 @@ bool RollbackManager::createTables() " FOREIGN KEY (`oldNode`) REFERENCES `node`(`id`),\n" " FOREIGN KEY (`newNode`) REFERENCES `node`(`id`)\n" ");\n" - "CREATE INDEX IF NOT EXISTS `actionActor` ON `action`(`actor`);\n" - "CREATE INDEX IF NOT EXISTS `actionTimestamp` ON `action`(`timestamp`);\n", + "CREATE INDEX IF NOT EXISTS `actionIndex` ON `action`(`x`,`y`,`z`,`timestamp`,`actor`);\n", NULL, NULL, NULL)); verbosestream << "SQL Rollback: SQLite3 database structure was created" << std::endl; @@ -858,7 +859,7 @@ std::string RollbackManager::getSuspect(v3s16 p, float nearness_shortcut, float likely_suspect_nearness = 0; for (std::list::const_reverse_iterator i = action_latest_buffer.rbegin(); - i != action_latest_buffer.rend(); i++) { + i != action_latest_buffer.rend(); ++i) { if (i->unix_time < first_time) { break; } @@ -897,7 +898,7 @@ void RollbackManager::flush() for (iter = action_todisk_buffer.begin(); iter != action_todisk_buffer.end(); - iter++) { + ++iter) { if (iter->actor == "") { continue; } @@ -930,6 +931,7 @@ std::list RollbackManager::getEntriesSince(time_t first_time) std::list RollbackManager::getNodeActors(v3s16 pos, int range, time_t seconds, int limit) { + flush(); time_t cur_time = time(0); time_t first_time = cur_time - seconds; diff --git a/src/rollback_interface.cpp b/src/rollback_interface.cpp index a92551ae..453a3aef 100644 --- a/src/rollback_interface.cpp +++ b/src/rollback_interface.cpp @@ -155,7 +155,7 @@ bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gam } else { NodeMetadata *meta = map->getNodeMetadata(p); if (!meta) { - meta = new NodeMetadata(gamedef); + meta = new NodeMetadata(gamedef->idef()); if (!map->setNodeMetadata(p, meta)) { delete meta; infostream << "RollbackAction::applyRevert(): " @@ -210,6 +210,7 @@ bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gam << inventory_index << " too large in " << "inventory list \"" << inventory_list << "\" in " << inventory_location << std::endl; + return false; } // If item was added, take away item, otherwise add removed item if (inventory_add) { diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 945b2845..ef830b0e 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -76,7 +76,7 @@ ItemDefinition read_item_definition(lua_State* L,int index, getboolfield(L, index, "liquids_pointable", def.liquids_pointable); warn_if_field_exists(L, index, "tool_digging_properties", - "deprecated: use tool_capabilities"); + "Deprecated; use tool_capabilities"); lua_getfield(L, index, "tool_capabilities"); if(lua_istable(L, -1)){ @@ -197,6 +197,7 @@ void read_object_properties(lua_State *L, int index, prop->automatic_face_movement_dir_offset = 0.0; } lua_pop(L, 1); + getboolfield(L, -1, "backface_culling", prop->backface_culling); } /******************************************************************************/ @@ -255,20 +256,25 @@ void push_object_properties(lua_State *L, ObjectProperties *prop) else lua_pushboolean(L, false); lua_setfield(L, -2, "automatic_face_movement_dir"); + lua_pushboolean(L, prop->backface_culling); + lua_setfield(L, -2, "backface_culling"); } /******************************************************************************/ -TileDef read_tiledef(lua_State *L, int index) +TileDef read_tiledef(lua_State *L, int index, u8 drawtype) { if(index < 0) index = lua_gettop(L) + 1 + index; TileDef tiledef; - + bool default_tiling = (drawtype == NDT_PLANTLIKE || drawtype == NDT_FIRELIKE) + ? false : true; // key at index -2 and value at index if(lua_isstring(L, index)){ // "default_lava.png" tiledef.name = lua_tostring(L, index); + tiledef.tileable_vertical = default_tiling; + tiledef.tileable_horizontal = default_tiling; } else if(lua_istable(L, index)) { @@ -277,20 +283,24 @@ TileDef read_tiledef(lua_State *L, int index) getstringfield(L, index, "name", tiledef.name); getstringfield(L, index, "image", tiledef.name); // MaterialSpec compat. tiledef.backface_culling = getboolfield_default( - L, index, "backface_culling", true); + L, index, "backface_culling", true); + tiledef.tileable_horizontal = getboolfield_default( + L, index, "tileable_horizontal", default_tiling); + tiledef.tileable_vertical = getboolfield_default( + L, index, "tileable_vertical", default_tiling); // animation = {} lua_getfield(L, index, "animation"); if(lua_istable(L, -1)){ // {type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0} tiledef.animation.type = (TileAnimationType) - getenumfield(L, -1, "type", es_TileAnimationType, - TAT_NONE); + getenumfield(L, -1, "type", es_TileAnimationType, + TAT_NONE); tiledef.animation.aspect_w = - getintfield_default(L, -1, "aspect_w", 16); + getintfield_default(L, -1, "aspect_w", 16); tiledef.animation.aspect_h = - getintfield_default(L, -1, "aspect_h", 16); + getintfield_default(L, -1, "aspect_h", 16); tiledef.animation.length = - getfloatfield_default(L, -1, "length", 1.0); + getfloatfield_default(L, -1, "length", 1.0); } lua_pop(L, 1); } @@ -353,7 +363,7 @@ ContentFeatures read_content_features(lua_State *L, int index) int i = 0; while(lua_next(L, table) != 0){ // Read tiledef from value - f.tiledef[i] = read_tiledef(L, -1); + f.tiledef[i] = read_tiledef(L, -1, f.drawtype); // removes value, keeps key for next iteration lua_pop(L, 1); i++; @@ -388,7 +398,7 @@ ContentFeatures read_content_features(lua_State *L, int index) int i = 0; while(lua_next(L, table) != 0){ // Read tiledef from value - f.tiledef_special[i] = read_tiledef(L, -1); + f.tiledef_special[i] = read_tiledef(L, -1, f.drawtype); // removes value, keeps key for next iteration lua_pop(L, 1); i++; @@ -420,17 +430,17 @@ ContentFeatures read_content_features(lua_State *L, int index) // Warn about some deprecated fields warn_if_field_exists(L, index, "wall_mounted", - "deprecated: use paramtype2 = 'wallmounted'"); + "Deprecated; use paramtype2 = 'wallmounted'"); warn_if_field_exists(L, index, "light_propagates", - "deprecated: determined from paramtype"); + "Deprecated; determined from paramtype"); warn_if_field_exists(L, index, "dug_item", - "deprecated: use 'drop' field"); + "Deprecated; use 'drop' field"); warn_if_field_exists(L, index, "extra_dug_item", - "deprecated: use 'drop' field"); + "Deprecated; use 'drop' field"); warn_if_field_exists(L, index, "extra_dug_item_rarity", - "deprecated: use 'drop' field"); + "Deprecated; use 'drop' field"); warn_if_field_exists(L, index, "metadata_name", - "deprecated: use on_add and metadata callbacks"); + "Deprecated; use on_add and metadata callbacks"); // True for all ground-like things like stone and mud, false for eg. trees getboolfield(L, index, "is_ground_content", f.is_ground_content); @@ -632,14 +642,13 @@ void pushnode(lua_State *L, const MapNode &n, INodeDefManager *ndef) /******************************************************************************/ void warn_if_field_exists(lua_State *L, int table, - const char *fieldname, const std::string &message) + const char *name, const std::string &message) { - lua_getfield(L, table, fieldname); - if(!lua_isnil(L, -1)){ -//TODO find way to access backtrace fct from here - // infostream< groups) +void push_groups(lua_State *L, const std::map &groups) { lua_newtable(L); - for (std::map::iterator it = groups.begin(); - it != groups.end(); ++it) { + std::map::const_iterator it; + for (it = groups.begin(); it != groups.end(); ++it) { lua_pushnumber(L, it->second); lua_setfield(L, -2, it->first.c_str()); } @@ -998,12 +1007,10 @@ void push_groups(lua_State *L, std::map groups) /******************************************************************************/ void push_items(lua_State *L, const std::vector &items) { - // Create and fill table lua_createtable(L, items.size(), 0); - std::vector::const_iterator iter = items.begin(); - for (u32 i = 0; iter != items.end(); iter++) { - LuaItemStack::create(L, *iter); - lua_rawseti(L, -2, ++i); + for (u32 i = 0; i != items.size(); i++) { + LuaItemStack::create(L, items[i]); + lua_rawseti(L, -2, i + 1); } } @@ -1227,4 +1234,3 @@ void read_json_value(lua_State *L, Json::Value &root, int index, u8 recursion) } lua_pop(L, 1); // Pop value } - diff --git a/src/script/common/c_content.h b/src/script/common/c_content.h index d6f79383..b3d4e007 100644 --- a/src/script/common/c_content.h +++ b/src/script/common/c_content.h @@ -62,61 +62,57 @@ struct NoiseParams; class Schematic; -ContentFeatures read_content_features (lua_State *L, int index); -TileDef read_tiledef (lua_State *L, int index); -void read_soundspec (lua_State *L, int index, - SimpleSoundSpec &spec); -NodeBox read_nodebox (lua_State *L, int index); +ContentFeatures read_content_features (lua_State *L, int index); +TileDef read_tiledef (lua_State *L, int index, + u8 drawtype); +void read_soundspec (lua_State *L, int index, + SimpleSoundSpec &spec); +NodeBox read_nodebox (lua_State *L, int index); -void read_server_sound_params (lua_State *L, int index, - ServerSoundParams ¶ms); +void read_server_sound_params (lua_State *L, int index, + ServerSoundParams ¶ms); -void push_dig_params (lua_State *L,const DigParams ¶ms); -void push_hit_params (lua_State *L,const HitParams ¶ms); +void push_dig_params (lua_State *L, + const DigParams ¶ms); +void push_hit_params (lua_State *L, + const HitParams ¶ms); -ItemStack read_item (lua_State *L, int index, Server* srv); +ItemStack read_item (lua_State *L, int index, Server *srv); -ToolCapabilities read_tool_capabilities (lua_State *L, - int table); +ToolCapabilities read_tool_capabilities (lua_State *L, int table); void push_tool_capabilities (lua_State *L, const ToolCapabilities &prop); -ItemDefinition read_item_definition (lua_State *L, - int index, +ItemDefinition read_item_definition (lua_State *L, int index, ItemDefinition default_def); -void read_object_properties (lua_State *L, - int index, +void read_object_properties (lua_State *L, int index, + ObjectProperties *prop); +void push_object_properties (lua_State *L, ObjectProperties *prop); -void push_object_properties (lua_State *L, - ObjectProperties *prop); void push_inventory_list (lua_State *L, Inventory *inv, const char *name); -void read_inventory_list (lua_State *L, - int tableindex, - Inventory *inv, - const char *name, - Server* srv, - int forcesize=-1); +void read_inventory_list (lua_State *L, int tableindex, + Inventory *inv, const char *name, + Server *srv, int forcesize=-1); -MapNode readnode (lua_State *L, - int index, +MapNode readnode (lua_State *L, int index, INodeDefManager *ndef); -void pushnode (lua_State *L, - const MapNode &n, +void pushnode (lua_State *L, const MapNode &n, INodeDefManager *ndef); NodeBox read_nodebox (lua_State *L, int index); -void read_groups (lua_State *L, - int index, +void read_groups (lua_State *L, int index, std::map &result); +void push_groups (lua_State *L, + const std::map &groups); + //TODO rename to "read_enum_field" -int getenumfield (lua_State *L, - int table, +int getenumfield (lua_State *L, int table, const char *fieldname, const EnumString *spec, int default_); @@ -129,8 +125,9 @@ bool getflagsfield (lua_State *L, int table, bool read_flags (lua_State *L, int index, FlagDesc *flagdesc, u32 *flags, u32 *flagmask); -void push_flags_string (lua_State *L, FlagDesc *flagdesc, - u32 flags, u32 flagmask); + +void push_flags_string (lua_State *L, FlagDesc *flagdesc, + u32 flags, u32 flagmask); u32 read_flags_table (lua_State *L, int table, FlagDesc *flagdesc, u32 *flagmask); @@ -146,25 +143,22 @@ void read_soundspec (lua_State *L, int index, SimpleSoundSpec &spec); - bool string_to_enum (const EnumString *spec, int &result, const std::string &str); bool read_noiseparams (lua_State *L, int index, NoiseParams *np); -void push_noiseparams (lua_State *L, NoiseParams *np); +void push_noiseparams (lua_State *L, NoiseParams *np); void luaentity_get (lua_State *L,u16 id); bool push_json_value (lua_State *L, const Json::Value &value, int nullindex); -void read_json_value (lua_State *L, - Json::Value &root, - int index, - u8 recursion = 0); +void read_json_value (lua_State *L, Json::Value &root, + int index, u8 recursion = 0); extern struct EnumString es_TileAnimationType[]; -#endif /* C_CONTENT_H_ */ +#endif /* C_CONTENT_H_ */ \ No newline at end of file diff --git a/src/script/common/c_converter.h b/src/script/common/c_converter.h index 41663c47..bc14d7cf 100644 --- a/src/script/common/c_converter.h +++ b/src/script/common/c_converter.h @@ -104,8 +104,6 @@ void push_ARGB8 (lua_State *L, video::SColor color); void pushFloatPos (lua_State *L, v3f p); void push_v3f (lua_State *L, v3f p); void push_v2f (lua_State *L, v2f p); -void push_groups (lua_State *L, - std::map groups); void warn_if_field_exists(lua_State *L, int table, const char *fieldname, @@ -116,4 +114,4 @@ size_t write_array_slice_float(lua_State *L, int table_index, float *data, size_t write_array_slice_u16(lua_State *L, int table_index, u16 *data, v3u16 data_size, v3u16 slice_offset, v3u16 slice_size); -#endif /* C_CONVERTER_H_ */ +#endif /* C_CONVERTER_H_ */ \ No newline at end of file diff --git a/src/script/common/c_internal.cpp b/src/script/common/c_internal.cpp index f4488999..25903217 100644 --- a/src/script/common/c_internal.cpp +++ b/src/script/common/c_internal.cpp @@ -69,11 +69,59 @@ int script_exception_wrapper(lua_State *L, lua_CFunction f) return lua_error(L); // Rethrow as a Lua error. } -void script_error(lua_State *L) +/* + * Note that we can't get tracebacks for LUA_ERRMEM or LUA_ERRERR (without + * hacking Lua internals). For LUA_ERRMEM, this is because memory errors will + * not execute the the error handler, and by the time lua_pcall returns the + * execution stack will have already been unwound. For LUA_ERRERR, there was + * another error while trying to generate a backtrace from a LUA_ERRRUN. It is + * presumed there is an error with the internal Lua state and thus not possible + * to gather a coherent backtrace. Realistically, the best we can do here is + * print which C function performed the failing pcall. + */ +void script_error(lua_State *L, int pcall_result, const char *mod, const char *fxn) { - const char *s = lua_tostring(L, -1); - std::string str(s ? s : ""); - throw LuaError(str); + if (pcall_result == 0) + return; + + const char *err_type; + switch (pcall_result) { + case LUA_ERRRUN: + err_type = "Runtime"; + break; + case LUA_ERRMEM: + err_type = "OOM"; + break; + case LUA_ERRERR: + err_type = "Double fault"; + break; + default: + err_type = "Unknown"; + } + + if (!mod) + mod = "??"; + + if (!fxn) + fxn = "??"; + + const char *err_descr = lua_tostring(L, -1); + if (!err_descr) + err_descr = ""; + + char buf[256]; + snprintf(buf, sizeof(buf), "%s error from mod '%s' in callback %s(): ", + err_type, mod, fxn); + + std::string err_msg(buf); + err_msg += err_descr; + + if (pcall_result == LUA_ERRMEM) { + err_msg += "\nCurrent Lua memory usage: " + + itos(lua_gc(L, LUA_GCCOUNT, 0) >> 10) + " MB"; + } + + throw LuaError(err_msg); } // Push the list of callbacks (a lua table). @@ -82,66 +130,62 @@ void script_error(lua_State *L) // - runs the callbacks // - replaces the table and arguments with the return value, // computed depending on mode -void script_run_callbacks(lua_State *L, int nargs, RunCallbacksMode mode) +void script_run_callbacks_f(lua_State *L, int nargs, + RunCallbacksMode mode, const char *fxn) { FATAL_ERROR_IF(lua_gettop(L) < nargs + 1, "Not enough arguments"); // Insert error handler - lua_pushcfunction(L, script_error_handler); - int errorhandler = lua_gettop(L) - nargs - 1; - lua_insert(L, errorhandler); + PUSH_ERROR_HANDLER(L); + int error_handler = lua_gettop(L) - nargs - 1; + lua_insert(L, error_handler); // Insert run_callbacks between error handler and table lua_getglobal(L, "core"); lua_getfield(L, -1, "run_callbacks"); lua_remove(L, -2); - lua_insert(L, errorhandler + 1); + lua_insert(L, error_handler + 1); // Insert mode after table lua_pushnumber(L, (int) mode); - lua_insert(L, errorhandler + 3); + lua_insert(L, error_handler + 3); // Stack now looks like this: // ... ... - if (lua_pcall(L, nargs + 2, 1, errorhandler)) { - script_error(L); - } + int result = lua_pcall(L, nargs + 2, 1, error_handler); + if (result != 0) + script_error(L, result, NULL, fxn); - lua_remove(L, -2); // Remove error handler + lua_remove(L, error_handler); } -void log_deprecated(lua_State *L, std::string message) +void log_deprecated(lua_State *L, const std::string &message) { static bool configured = false; - static bool dolog = false; - static bool doerror = false; + static bool do_log = false; + static bool do_error = false; - // performance optimization to not have to read and compare setting for every logline + // Only read settings on first call if (!configured) { std::string value = g_settings->get("deprecated_lua_api_handling"); if (value == "log") { - dolog = true; - } - if (value == "error") { - dolog = true; - doerror = true; + do_log = true; + } else if (value == "error") { + do_log = true; + do_error = true; } } - if (doerror) { - if (L != NULL) { - script_error(L); - } else { - FATAL_ERROR("Can't do a scripterror for this deprecated message, so exit completely!"); - } - } - - if (dolog) { - /* abusing actionstream because of lack of file-only-logged loglevel */ - actionstream << message << std::endl; - if (L != NULL) { - actionstream << script_get_backtrace(L) << std::endl; + if (do_log) { + warningstream << message << std::endl; + // L can be NULL if we get called by log_deprecated(const std::string &msg) + // from scripting_game.cpp. + if (L) { + if (do_error) + script_error(L, LUA_ERRRUN, NULL, NULL); + else + infostream << script_get_backtrace(L) << std::endl; } } } diff --git a/src/script/common/c_internal.h b/src/script/common/c_internal.h index 828c9c6b..43a25bfa 100644 --- a/src/script/common/c_internal.h +++ b/src/script/common/c_internal.h @@ -34,6 +34,41 @@ extern "C" { #include "common/c_types.h" + +/* + Define our custom indices into the Lua registry table. + + Lua 5.2 and above define the LUA_RIDX_LAST macro. Only numbers above that + may be used for custom indices, anything else is reserved. + + Lua 5.1 / LuaJIT do not use any numeric indices (only string indices), + so we can use numeric indices freely. +*/ +#ifdef LUA_RIDX_LAST +#define CUSTOM_RIDX_BASE ((LUA_RIDX_LAST)+1) +#else +#define CUSTOM_RIDX_BASE 1 +#endif + +#define CUSTOM_RIDX_SCRIPTAPI (CUSTOM_RIDX_BASE) +#define CUSTOM_RIDX_GLOBALS_BACKUP (CUSTOM_RIDX_BASE + 1) +#define CUSTOM_RIDX_CURRENT_MOD_NAME (CUSTOM_RIDX_BASE + 2) +#define CUSTOM_RIDX_ERROR_HANDLER (CUSTOM_RIDX_BASE + 3) + +// Pushes the error handler onto the stack and returns its index +#define PUSH_ERROR_HANDLER(L) \ + (lua_rawgeti((L), LUA_REGISTRYINDEX, CUSTOM_RIDX_ERROR_HANDLER), lua_gettop((L))) + +#define PCALL_RESL(L, RES) do { \ + int result_ = (RES); \ + if (result_ != 0) { \ + script_error((L), result_, NULL, __FUNCTION__); \ + } \ +} while (0) + +#define script_run_callbacks(L, nargs, mode) \ + script_run_callbacks_f((L), (nargs), (mode), __FUNCTION__) + // What script_run_callbacks does with the return values of callbacks. // Regardless of the mode, if only one callback is defined, // its return value is the total return value. @@ -67,8 +102,9 @@ enum RunCallbacksMode std::string script_get_backtrace(lua_State *L); int script_error_handler(lua_State *L); int script_exception_wrapper(lua_State *L, lua_CFunction f); -void script_error(lua_State *L); -void script_run_callbacks(lua_State *L, int nargs, RunCallbacksMode mode); -void log_deprecated(lua_State *L, std::string message); +void script_error(lua_State *L, int pcall_result, const char *mod, const char *fxn); +void script_run_callbacks_f(lua_State *L, int nargs, + RunCallbacksMode mode, const char *fxn); +void log_deprecated(lua_State *L, const std::string &message); #endif /* C_INTERNAL_H_ */ diff --git a/src/script/common/c_types.h b/src/script/common/c_types.h index 43a2968d..809e1713 100644 --- a/src/script/common/c_types.h +++ b/src/script/common/c_types.h @@ -52,10 +52,10 @@ public: } }; -class LuaError : public ServerError +class LuaError : public ModError { public: - LuaError(const std::string &s) : ServerError(s) {} + LuaError(const std::string &s) : ModError(s) {} }; diff --git a/src/script/cpp_api/s_async.cpp b/src/script/cpp_api/s_async.cpp index f43a333f..f284cceb 100644 --- a/src/script/cpp_api/s_async.cpp +++ b/src/script/cpp_api/s_async.cpp @@ -47,32 +47,31 @@ AsyncEngine::~AsyncEngine() // Request all threads to stop for (std::vector::iterator it = workerThreads.begin(); it != workerThreads.end(); it++) { - (*it)->Stop(); + (*it)->stop(); } // Wake up all threads for (std::vector::iterator it = workerThreads.begin(); it != workerThreads.end(); it++) { - jobQueueCounter.Post(); + jobQueueCounter.post(); } // Wait for threads to finish for (std::vector::iterator it = workerThreads.begin(); it != workerThreads.end(); it++) { - (*it)->Wait(); + (*it)->wait(); } // Force kill all threads for (std::vector::iterator it = workerThreads.begin(); it != workerThreads.end(); it++) { - (*it)->Kill(); delete *it; } - jobQueueMutex.Lock(); + jobQueueMutex.lock(); jobQueue.clear(); - jobQueueMutex.Unlock(); + jobQueueMutex.unlock(); workerThreads.clear(); } @@ -92,16 +91,17 @@ void AsyncEngine::initialize(unsigned int numEngines) initDone = true; for (unsigned int i = 0; i < numEngines; i++) { - AsyncWorkerThread *toAdd = new AsyncWorkerThread(this, i); + AsyncWorkerThread *toAdd = new AsyncWorkerThread(this, + std::string("AsyncWorker-") + itos(i)); workerThreads.push_back(toAdd); - toAdd->Start(); + toAdd->start(); } } /******************************************************************************/ unsigned int AsyncEngine::queueAsyncJob(std::string func, std::string params) { - jobQueueMutex.Lock(); + jobQueueMutex.lock(); LuaJobInfo toAdd; toAdd.id = jobIdCounter++; toAdd.serializedFunction = func; @@ -109,9 +109,9 @@ unsigned int AsyncEngine::queueAsyncJob(std::string func, std::string params) jobQueue.push_back(toAdd); - jobQueueCounter.Post(); + jobQueueCounter.post(); - jobQueueMutex.Unlock(); + jobQueueMutex.unlock(); return toAdd.id; } @@ -119,8 +119,8 @@ unsigned int AsyncEngine::queueAsyncJob(std::string func, std::string params) /******************************************************************************/ LuaJobInfo AsyncEngine::getJob() { - jobQueueCounter.Wait(); - jobQueueMutex.Lock(); + jobQueueCounter.wait(); + jobQueueMutex.lock(); LuaJobInfo retval; retval.valid = false; @@ -130,7 +130,7 @@ LuaJobInfo AsyncEngine::getJob() jobQueue.pop_front(); retval.valid = true; } - jobQueueMutex.Unlock(); + jobQueueMutex.unlock(); return retval; } @@ -138,16 +138,17 @@ LuaJobInfo AsyncEngine::getJob() /******************************************************************************/ void AsyncEngine::putJobResult(LuaJobInfo result) { - resultQueueMutex.Lock(); + resultQueueMutex.lock(); resultQueue.push_back(result); - resultQueueMutex.Unlock(); + resultQueueMutex.unlock(); } /******************************************************************************/ -void AsyncEngine::step(lua_State *L, int errorhandler) +void AsyncEngine::step(lua_State *L) { + int error_handler = PUSH_ERROR_HANDLER(L); lua_getglobal(L, "core"); - resultQueueMutex.Lock(); + resultQueueMutex.lock(); while (!resultQueue.empty()) { LuaJobInfo jobDone = resultQueue.front(); resultQueue.pop_front(); @@ -164,18 +165,16 @@ void AsyncEngine::step(lua_State *L, int errorhandler) lua_pushlstring(L, jobDone.serializedResult.data(), jobDone.serializedResult.size()); - if (lua_pcall(L, 2, 0, errorhandler)) { - script_error(L); - } + PCALL_RESL(L, lua_pcall(L, 2, 0, error_handler)); } - resultQueueMutex.Unlock(); - lua_pop(L, 1); // Pop core + resultQueueMutex.unlock(); + lua_pop(L, 2); // Pop core and error handler } /******************************************************************************/ void AsyncEngine::pushFinishedJobs(lua_State* L) { // Result Table - resultQueueMutex.Lock(); + MutexAutoLock l(resultQueueMutex); unsigned int index = 1; lua_createtable(L, resultQueue.size(), 0); @@ -199,8 +198,6 @@ void AsyncEngine::pushFinishedJobs(lua_State* L) { lua_rawseti(L, top, index++); } - - resultQueueMutex.Unlock(); } /******************************************************************************/ @@ -216,10 +213,10 @@ void AsyncEngine::prepareEnvironment(lua_State* L, int top) /******************************************************************************/ AsyncWorkerThread::AsyncWorkerThread(AsyncEngine* jobDispatcher, - unsigned int threadNum) : + const std::string &name) : + Thread(name), ScriptApiBase(), - jobDispatcher(jobDispatcher), - threadnum(threadNum) + jobDispatcher(jobDispatcher) { lua_State *L = getStack(); @@ -237,50 +234,42 @@ AsyncWorkerThread::AsyncWorkerThread(AsyncEngine* jobDispatcher, /******************************************************************************/ AsyncWorkerThread::~AsyncWorkerThread() { - sanity_check(IsRunning() == false); + sanity_check(!isRunning()); } /******************************************************************************/ -void* AsyncWorkerThread::Thread() +void* AsyncWorkerThread::run() { - ThreadStarted(); - - // Register thread for error logging - char number[21]; - snprintf(number, sizeof(number), "%u", threadnum); - log_register_thread(std::string("AsyncWorkerThread_") + number); - - porting::setThreadName((std::string("AsyncWorkTh_") + number).c_str()); - lua_State *L = getStack(); std::string script = getServer()->getBuiltinLuaPath() + DIR_DELIM + "init.lua"; - if (!loadScript(script)) { - errorstream - << "AsyncWorkderThread execution of async base environment failed!" - << std::endl; - abort(); + try { + loadScript(script); + } catch (const ModError &e) { + errorstream << "Execution of async base environment failed: " + << e.what() << std::endl; + FATAL_ERROR("Execution of async base environment failed"); } + int error_handler = PUSH_ERROR_HANDLER(L); + lua_getglobal(L, "core"); if (lua_isnil(L, -1)) { - errorstream << "Unable to find core within async environment!"; - abort(); + FATAL_ERROR("Unable to find core within async environment!"); } // Main loop - while (!StopRequested()) { + while (!stopRequested()) { // Wait for job LuaJobInfo toProcess = jobDispatcher->getJob(); - if (toProcess.valid == false || StopRequested()) { + if (toProcess.valid == false || stopRequested()) { continue; } lua_getfield(L, -1, "job_processor"); if (lua_isnil(L, -1)) { - errorstream << "Unable to get async job processor!" << std::endl; - abort(); + FATAL_ERROR("Unable to get async job processor!"); } luaL_checktype(L, -1, LUA_TFUNCTION); @@ -293,8 +282,9 @@ void* AsyncWorkerThread::Thread() toProcess.serializedParams.data(), toProcess.serializedParams.size()); - if (lua_pcall(L, 2, 1, m_errorhandler)) { - scriptError(); + int result = lua_pcall(L, 2, 1, error_handler); + if (result) { + PCALL_RES(result); toProcess.serializedResult = ""; } else { // Fetch result @@ -309,9 +299,7 @@ void* AsyncWorkerThread::Thread() jobDispatcher->putJobResult(toProcess); } - lua_pop(L, 1); // Pop core - - log_deregister_thread(); + lua_pop(L, 2); // Pop core and error handler return 0; } diff --git a/src/script/cpp_api/s_async.h b/src/script/cpp_api/s_async.h index 8e4e8db1..34fc52a4 100644 --- a/src/script/cpp_api/s_async.h +++ b/src/script/cpp_api/s_async.h @@ -24,9 +24,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include -#include "jthread/jthread.h" -#include "jthread/jmutex.h" -#include "jthread/jsemaphore.h" +#include "threading/thread.h" +#include "threading/mutex.h" +#include "threading/semaphore.h" #include "debug.h" #include "lua.h" #include "cpp_api/s_base.h" @@ -52,24 +52,15 @@ struct LuaJobInfo { }; // Asynchronous working environment -class AsyncWorkerThread : public JThread, public ScriptApiBase { +class AsyncWorkerThread : public Thread, public ScriptApiBase { public: - /** - * default constructor - * @param pointer to job dispatcher - */ - AsyncWorkerThread(AsyncEngine* jobDispatcher, unsigned int threadNum); - + AsyncWorkerThread(AsyncEngine* jobDispatcher, const std::string &name); virtual ~AsyncWorkerThread(); - void *Thread(); + void *run(); private: AsyncEngine *jobDispatcher; - - // Thread number. Used for debug output - unsigned int threadnum; - }; // Asynchornous thread and job management @@ -104,9 +95,8 @@ public: * Engine step to process finished jobs * the engine step is one way to pass events back, PushFinishedJobs another * @param L The Lua stack - * @param errorhandler Stack index of the Lua error handler */ - void step(lua_State *L, int errorhandler); + void step(lua_State *L); /** * Push a list of finished jobs onto the stack @@ -148,13 +138,13 @@ private: unsigned int jobIdCounter; // Mutex to protect job queue - JMutex jobQueueMutex; + Mutex jobQueueMutex; // Job queue std::deque jobQueue; // Mutex to protect result queue - JMutex resultQueueMutex; + Mutex resultQueueMutex; // Result queue std::deque resultQueue; @@ -162,7 +152,7 @@ private: std::vector workerThreads; // Counter semaphore for job dispatching - JSemaphore jobQueueCounter; + Semaphore jobQueueCounter; }; #endif // CPP_API_ASYNC_EVENTS_HEADER diff --git a/src/script/cpp_api/s_base.cpp b/src/script/cpp_api/s_base.cpp index 0dc98954..1ef8bdd9 100644 --- a/src/script/cpp_api/s_base.cpp +++ b/src/script/cpp_api/s_base.cpp @@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "cpp_api/s_internal.h" #include "cpp_api/s_security.h" #include "lua_api/l_object.h" +#include "common/c_converter.h" #include "serverobject.h" #include "debug.h" #include "filesys.h" @@ -51,13 +52,13 @@ public: { // Store current mod name in registry lua_pushstring(L, mod_name.c_str()); - lua_setfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + lua_rawseti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); } ~ModNameStorer() { // Clear current mod name from registry lua_pushnil(L); - lua_setfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + lua_rawseti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); } }; @@ -68,22 +69,22 @@ public: ScriptApiBase::ScriptApiBase() { - #ifdef SCRIPTAPI_LOCK_DEBUG +#ifdef SCRIPTAPI_LOCK_DEBUG m_locked = false; - #endif +#endif m_luastack = luaL_newstate(); FATAL_ERROR_IF(!m_luastack, "luaL_newstate() failed"); luaL_openlibs(m_luastack); - // Add and save an error handler - lua_pushcfunction(m_luastack, script_error_handler); - m_errorhandler = lua_gettop(m_luastack); - // Make the ScriptApiBase* accessible to ModApiBase lua_pushlightuserdata(m_luastack, this); - lua_setfield(m_luastack, LUA_REGISTRYINDEX, "scriptapi"); + lua_rawseti(m_luastack, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI); + + // Add and save an error handler + lua_pushcfunction(m_luastack, script_error_handler); + lua_rawseti(m_luastack, LUA_REGISTRYINDEX, CUSTOM_RIDX_ERROR_HANDLER); // If we are using LuaJIT add a C++ wrapper function to catch // exceptions thrown in Lua -> C++ calls @@ -103,6 +104,11 @@ ScriptApiBase::ScriptApiBase() lua_pushstring(m_luastack, porting::getPlatformName()); lua_setglobal(m_luastack, "PLATFORM"); + // m_secure gets set to true inside + // ScriptApiSecurity::initializeSecurity(), if neccessary. + // Default to false otherwise + m_secure = false; + m_server = NULL; m_environment = NULL; m_guiengine = NULL; @@ -113,87 +119,132 @@ ScriptApiBase::~ScriptApiBase() lua_close(m_luastack); } -bool ScriptApiBase::loadMod(const std::string &script_path, +void ScriptApiBase::loadMod(const std::string &script_path, const std::string &mod_name) { ModNameStorer mod_name_storer(getStack(), mod_name); - return loadScript(script_path); + loadScript(script_path); } -bool ScriptApiBase::loadScript(const std::string &script_path) +void ScriptApiBase::loadScript(const std::string &script_path) { verbosestream << "Loading and running script from " << script_path << std::endl; lua_State *L = getStack(); + int error_handler = PUSH_ERROR_HANDLER(L); + bool ok; if (m_secure) { ok = ScriptApiSecurity::safeLoadFile(L, script_path.c_str()); } else { ok = !luaL_loadfile(L, script_path.c_str()); } - ok = ok && !lua_pcall(L, 0, 0, m_errorhandler); + ok = ok && !lua_pcall(L, 0, 0, error_handler); if (!ok) { - errorstream << "========== ERROR FROM LUA ===========" << std::endl; - errorstream << "Failed to load and run script from " << std::endl; - errorstream << script_path << ":" << std::endl; - errorstream << std::endl; - errorstream << lua_tostring(L, -1) << std::endl; - errorstream << std::endl; - errorstream << "======= END OF ERROR FROM LUA ========" << std::endl; - lua_pop(L, 1); // Pop error message from stack - return false; + std::string error_msg = lua_tostring(L, -1); + lua_pop(L, 2); // Pop error message and error handler + throw ModError("Failed to load and run script from " + + script_path + ":\n" + error_msg); } - return true; + lua_pop(L, 1); // Pop error handler +} + +// Push the list of callbacks (a lua table). +// Then push nargs arguments. +// Then call this function, which +// - runs the callbacks +// - replaces the table and arguments with the return value, +// computed depending on mode +void ScriptApiBase::runCallbacksRaw(int nargs, + RunCallbacksMode mode, const char *fxn) +{ + lua_State *L = getStack(); + FATAL_ERROR_IF(lua_gettop(L) < nargs + 1, "Not enough arguments"); + + // Insert error handler + PUSH_ERROR_HANDLER(L); + int error_handler = lua_gettop(L) - nargs - 1; + lua_insert(L, error_handler); + + // Insert run_callbacks between error handler and table + lua_getglobal(L, "core"); + lua_getfield(L, -1, "run_callbacks"); + lua_remove(L, -2); + lua_insert(L, error_handler + 1); + + // Insert mode after table + lua_pushnumber(L, (int)mode); + lua_insert(L, error_handler + 3); + + // Stack now looks like this: + // ...
... + + int result = lua_pcall(L, nargs + 2, 1, error_handler); + if (result != 0) + scriptError(result, fxn); + + lua_remove(L, error_handler); } void ScriptApiBase::realityCheck() { int top = lua_gettop(m_luastack); - if(top >= 30){ - dstream<<"Stack is over 30:"<= 30) { + dstream << "Stack is over 30:" << std::endl; stackDump(dstream); std::string traceback = script_get_backtrace(m_luastack); throw LuaError("Stack is over 30 (reality check)\n" + traceback); } } -void ScriptApiBase::scriptError() +void ScriptApiBase::scriptError(int result, const char *fxn) { - throw LuaError(lua_tostring(m_luastack, -1)); + script_error(getStack(), result, m_last_run_mod.c_str(), fxn); } void ScriptApiBase::stackDump(std::ostream &o) { - int i; int top = lua_gettop(m_luastack); - for (i = 1; i <= top; i++) { /* repeat for each level */ + for (int i = 1; i <= top; i++) { /* repeat for each level */ int t = lua_type(m_luastack, i); switch (t) { - case LUA_TSTRING: /* strings */ - o<<"\""<>>> running %s for mod: %s\n", fxn, m_last_run_mod.c_str()); +#endif } void ScriptApiBase::addObjectReference(ServerActiveObject *cobj) @@ -245,7 +296,7 @@ void ScriptApiBase::removeObjectReference(ServerActiveObject *cobj) void ScriptApiBase::objectrefGetOrCreate(lua_State *L, ServerActiveObject *cobj) { - if(cobj == NULL || cobj->getId() == 0){ + if (cobj == NULL || cobj->getId() == 0) { ObjectRef::create(L, cobj); } else { objectrefGet(L, cobj->getId()); @@ -263,4 +314,3 @@ void ScriptApiBase::objectrefGet(lua_State *L, u16 id) lua_remove(L, -2); // object_refs lua_remove(L, -2); // core } - diff --git a/src/script/cpp_api/s_base.h b/src/script/cpp_api/s_base.h index 2dee53ac..990ad0c9 100644 --- a/src/script/cpp_api/s_base.h +++ b/src/script/cpp_api/s_base.h @@ -28,12 +28,30 @@ extern "C" { } #include "irrlichttypes.h" -#include "jthread/jmutex.h" -#include "jthread/jmutexautolock.h" +#include "threading/mutex.h" +#include "threading/mutex_auto_lock.h" #include "common/c_types.h" #include "common/c_internal.h" #define SCRIPTAPI_LOCK_DEBUG +#define SCRIPTAPI_DEBUG + +// MUST be an invalid mod name so that mods can't +// use that name to bypass security! +#define BUILTIN_MOD_NAME "*builtin*" + +#define PCALL_RES(RES) do { \ + int result_ = (RES); \ + if (result_ != 0) { \ + scriptError(result_, __FUNCTION__); \ + } \ +} while (0) + +#define runCallbacks(nargs, mode) \ + runCallbacksRaw((nargs), (mode), __FUNCTION__) + +#define setOriginFromTable(index) \ + setOriginFromTableRaw(index, __FUNCTION__) #define SCRIPT_MOD_NAME_FIELD "current_mod_name" // MUST be an invalid mod name so that mods can't @@ -51,8 +69,12 @@ public: ScriptApiBase(); virtual ~ScriptApiBase(); - bool loadMod(const std::string &script_path, const std::string &mod_name); - bool loadScript(const std::string &script_path); + // These throw a ModError on failure + void loadMod(const std::string &script_path, const std::string &mod_name); + void loadScript(const std::string &script_path); + + void runCallbacksRaw(int nargs, + RunCallbacksMode mode, const char *fxn); /* object */ void addObjectReference(ServerActiveObject *cobj); @@ -60,6 +82,10 @@ public: Server* getServer() { return m_server; } + std::string getOrigin() { return m_last_run_mod; } + void setOriginDirect(const char *origin); + void setOriginFromTableRaw(int index, const char *fxn); + protected: friend class LuaABM; friend class InvRef; @@ -73,7 +99,7 @@ protected: { return m_luastack; } void realityCheck(); - void scriptError(); + void scriptError(int result, const char *fxn); void stackDump(std::ostream &o); void setServer(Server* server) { m_server = server; } @@ -87,9 +113,8 @@ protected: void objectrefGetOrCreate(lua_State *L, ServerActiveObject *cobj); void objectrefGet(lua_State *L, u16 id); - JMutex m_luastackmutex; - // Stack index of Lua error handler - int m_errorhandler; + Mutex m_luastackmutex; + std::string m_last_run_mod; bool m_secure; #ifdef SCRIPTAPI_LOCK_DEBUG bool m_locked; diff --git a/src/script/cpp_api/s_entity.cpp b/src/script/cpp_api/s_entity.cpp index bd664325..cc4cfa55 100644 --- a/src/script/cpp_api/s_entity.cpp +++ b/src/script/cpp_api/s_entity.cpp @@ -80,6 +80,8 @@ void ScriptApiEntity::luaentity_Activate(u16 id, verbosestream << "scriptapi_luaentity_activate: id=" << id << std::endl; + int error_handler = PUSH_ERROR_HANDLER(L); + // Get core.luaentities[id] luaentity_get(L, id); int object = lua_gettop(L); @@ -91,13 +93,13 @@ void ScriptApiEntity::luaentity_Activate(u16 id, lua_pushvalue(L, object); // self lua_pushlstring(L, staticdata.c_str(), staticdata.size()); lua_pushinteger(L, dtime_s); - // Call with 3 arguments, 0 results - if (lua_pcall(L, 3, 0, m_errorhandler)) - scriptError(); + + setOriginFromTable(object); + PCALL_RES(lua_pcall(L, 3, 0, error_handler)); } else { lua_pop(L, 1); } - lua_pop(L, 1); // Pop object + lua_pop(L, 2); // Pop object and error handler } void ScriptApiEntity::luaentity_Remove(u16 id) @@ -126,6 +128,8 @@ std::string ScriptApiEntity::luaentity_GetStaticdata(u16 id) //infostream<<"scriptapi_luaentity_get_staticdata: id="<addActiveBlockModifier(abm); diff --git a/src/script/cpp_api/s_internal.h b/src/script/cpp_api/s_internal.h index 69a202d1..9325d710 100644 --- a/src/script/cpp_api/s_internal.h +++ b/src/script/cpp_api/s_internal.h @@ -34,7 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "debug.h" // assert() class LockChecker { public: - LockChecker(bool* variable) { + LockChecker(bool *variable) { assert(*variable == false); m_variable = variable; @@ -44,7 +44,7 @@ public: *m_variable = false; } private: -bool* m_variable; + bool *m_variable; }; #define SCRIPTAPI_LOCK_CHECK LockChecker(&(this->m_locked)) @@ -53,7 +53,7 @@ bool* m_variable; #endif #define SCRIPTAPI_PRECHECKHEADER \ - JMutexAutoLock(this->m_luastackmutex); \ + MutexAutoLock(this->m_luastackmutex); \ SCRIPTAPI_LOCK_CHECK; \ realityCheck(); \ lua_State *L = getStack(); \ diff --git a/src/script/cpp_api/s_inventory.cpp b/src/script/cpp_api/s_inventory.cpp index 06c0b1c2..560984d7 100644 --- a/src/script/cpp_api/s_inventory.cpp +++ b/src/script/cpp_api/s_inventory.cpp @@ -33,6 +33,8 @@ int ScriptApiDetached::detached_inventory_AllowMove( { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + // Push callback function on stack if (!getDetachedInventoryCallback(name, "allow_move")) return count; @@ -48,12 +50,11 @@ int ScriptApiDetached::detached_inventory_AllowMove( lua_pushinteger(L, to_index + 1); // to_index lua_pushinteger(L, count); // count objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 7, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 7, 1, error_handler)); if(!lua_isnumber(L, -1)) throw LuaError("allow_move should return a number. name=" + name); int ret = luaL_checkinteger(L, -1); - lua_pop(L, 1); // Pop integer + lua_pop(L, 2); // Pop integer and error handler return ret; } @@ -65,6 +66,8 @@ int ScriptApiDetached::detached_inventory_AllowPut( { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + // Push callback function on stack if (!getDetachedInventoryCallback(name, "allow_put")) return stack.count; // All will be accepted @@ -77,12 +80,11 @@ int ScriptApiDetached::detached_inventory_AllowPut( lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 5, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 1, error_handler)); if (!lua_isnumber(L, -1)) throw LuaError("allow_put should return a number. name=" + name); int ret = luaL_checkinteger(L, -1); - lua_pop(L, 1); // Pop integer + lua_pop(L, 2); // Pop integer and error handler return ret; } @@ -94,6 +96,8 @@ int ScriptApiDetached::detached_inventory_AllowTake( { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + // Push callback function on stack if (!getDetachedInventoryCallback(name, "allow_take")) return stack.count; // All will be accepted @@ -106,12 +110,11 @@ int ScriptApiDetached::detached_inventory_AllowTake( lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 5, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 1, error_handler)); if (!lua_isnumber(L, -1)) throw LuaError("allow_take should return a number. name=" + name); int ret = luaL_checkinteger(L, -1); - lua_pop(L, 1); // Pop integer + lua_pop(L, 2); // Pop integer and error handler return ret; } @@ -124,6 +127,8 @@ void ScriptApiDetached::detached_inventory_OnMove( { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + // Push callback function on stack if (!getDetachedInventoryCallback(name, "on_move")) return; @@ -139,8 +144,8 @@ void ScriptApiDetached::detached_inventory_OnMove( lua_pushinteger(L, to_index + 1); // to_index lua_pushinteger(L, count); // count objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 7, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 7, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } // Report put items @@ -151,6 +156,8 @@ void ScriptApiDetached::detached_inventory_OnPut( { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + // Push callback function on stack if (!getDetachedInventoryCallback(name, "on_put")) return; @@ -164,8 +171,8 @@ void ScriptApiDetached::detached_inventory_OnPut( lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 5, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } // Report taken items @@ -176,6 +183,8 @@ void ScriptApiDetached::detached_inventory_OnTake( { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + // Push callback function on stack if (!getDetachedInventoryCallback(name, "on_take")) return; @@ -189,8 +198,8 @@ void ScriptApiDetached::detached_inventory_OnTake( lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 5, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } // Retrieves core.detached_inventories[name][callbackname] @@ -215,6 +224,9 @@ bool ScriptApiDetached::getDetachedInventoryCallback( lua_pop(L, 1); return false; } + + setOriginFromTable(-1); + lua_getfield(L, -1, callbackname); lua_remove(L, -2); // Should be a function or nil diff --git a/src/script/cpp_api/s_item.cpp b/src/script/cpp_api/s_item.cpp index b737ded4..f6e1858f 100644 --- a/src/script/cpp_api/s_item.cpp +++ b/src/script/cpp_api/s_item.cpp @@ -34,6 +34,8 @@ bool ScriptApiItem::item_OnDrop(ItemStack &item, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + // Push callback function on stack if (!getItemCallback(item.name.c_str(), "on_drop")) return false; @@ -42,8 +44,7 @@ bool ScriptApiItem::item_OnDrop(ItemStack &item, LuaItemStack::create(L, item); objectrefGetOrCreate(L, dropper); pushFloatPos(L, pos); - if (lua_pcall(L, 3, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 3, 1, error_handler)); if (!lua_isnil(L, -1)) { try { item = read_item(L,-1, getServer()); @@ -51,7 +52,7 @@ bool ScriptApiItem::item_OnDrop(ItemStack &item, throw LuaError(std::string(e.what()) + ". item=" + item.name); } } - lua_pop(L, 1); // Pop item + lua_pop(L, 2); // Pop item and error handler return true; } @@ -60,6 +61,8 @@ bool ScriptApiItem::item_OnPlace(ItemStack &item, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + // Push callback function on stack if (!getItemCallback(item.name.c_str(), "on_place")) return false; @@ -68,8 +71,7 @@ bool ScriptApiItem::item_OnPlace(ItemStack &item, LuaItemStack::create(L, item); objectrefGetOrCreate(L, placer); pushPointedThing(pointed); - if (lua_pcall(L, 3, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 3, 1, error_handler)); if (!lua_isnil(L, -1)) { try { item = read_item(L,-1, getServer()); @@ -77,7 +79,7 @@ bool ScriptApiItem::item_OnPlace(ItemStack &item, throw LuaError(std::string(e.what()) + ". item=" + item.name); } } - lua_pop(L, 1); // Pop item + lua_pop(L, 2); // Pop item and error handler return true; } @@ -86,6 +88,8 @@ bool ScriptApiItem::item_OnUse(ItemStack &item, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + // Push callback function on stack if (!getItemCallback(item.name.c_str(), "on_use")) return false; @@ -94,8 +98,7 @@ bool ScriptApiItem::item_OnUse(ItemStack &item, LuaItemStack::create(L, item); objectrefGetOrCreate(L, user); pushPointedThing(pointed); - if (lua_pcall(L, 3, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 3, 1, error_handler)); if(!lua_isnil(L, -1)) { try { item = read_item(L,-1, getServer()); @@ -103,7 +106,7 @@ bool ScriptApiItem::item_OnUse(ItemStack &item, throw LuaError(std::string(e.what()) + ". item=" + item.name); } } - lua_pop(L, 1); // Pop item + lua_pop(L, 2); // Pop item and error handler return true; } @@ -112,11 +115,13 @@ bool ScriptApiItem::item_OnCraft(ItemStack &item, ServerActiveObject *user, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + lua_getglobal(L, "core"); lua_getfield(L, -1, "on_craft"); LuaItemStack::create(L, item); objectrefGetOrCreate(L, user); - + // Push inventory list std::vector items; for (u32 i = 0; i < old_craft_grid->getSize(); i++) { @@ -125,8 +130,7 @@ bool ScriptApiItem::item_OnCraft(ItemStack &item, ServerActiveObject *user, push_items(L, items); InvRef::create(L, craft_inv); - if (lua_pcall(L, 4, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 4, 1, error_handler)); if (!lua_isnil(L, -1)) { try { item = read_item(L,-1, getServer()); @@ -134,7 +138,7 @@ bool ScriptApiItem::item_OnCraft(ItemStack &item, ServerActiveObject *user, throw LuaError(std::string(e.what()) + ". item=" + item.name); } } - lua_pop(L, 1); // Pop item + lua_pop(L, 2); // Pop item and error handler return true; } @@ -143,6 +147,8 @@ bool ScriptApiItem::item_CraftPredict(ItemStack &item, ServerActiveObject *user, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + lua_getglobal(L, "core"); lua_getfield(L, -1, "craft_predict"); LuaItemStack::create(L, item); @@ -156,8 +162,7 @@ bool ScriptApiItem::item_CraftPredict(ItemStack &item, ServerActiveObject *user, push_items(L, items); InvRef::create(L, craft_inv); - if (lua_pcall(L, 4, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 4, 1, error_handler)); if (!lua_isnil(L, -1)) { try { item = read_item(L,-1, getServer()); @@ -165,7 +170,7 @@ bool ScriptApiItem::item_CraftPredict(ItemStack &item, ServerActiveObject *user, throw LuaError(std::string(e.what()) + ". item=" + item.name); } } - lua_pop(L, 1); // Pop item + lua_pop(L, 2); // Pop item and error handler return true; } @@ -198,6 +203,9 @@ bool ScriptApiItem::getItemCallback(const char *name, const char *callbackname) lua_remove(L, -2); luaL_checktype(L, -1, LUA_TTABLE); } + + setOriginFromTable(-1); + lua_getfield(L, -1, callbackname); lua_remove(L, -2); // Remove item def // Should be a function or nil diff --git a/src/script/cpp_api/s_mainmenu.cpp b/src/script/cpp_api/s_mainmenu.cpp index 4321d5c7..a1c1cd2a 100644 --- a/src/script/cpp_api/s_mainmenu.cpp +++ b/src/script/cpp_api/s_mainmenu.cpp @@ -21,15 +21,21 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "cpp_api/s_internal.h" #include "common/c_converter.h" -void ScriptApiMainMenu::setMainMenuErrorMessage(std::string errormessage) +void ScriptApiMainMenu::setMainMenuData(MainMenuDataForScript *data) { SCRIPTAPI_PRECHECKHEADER lua_getglobal(L, "gamedata"); int gamedata_idx = lua_gettop(L); lua_pushstring(L, "errormessage"); - lua_pushstring(L, errormessage.c_str()); + if (!data->errormessage.empty()) { + lua_pushstring(L, data->errormessage.c_str()); + } else { + lua_pushnil(L); + } lua_settable(L, gamedata_idx); + setboolfield(L, gamedata_idx, "reconnect_requested", + data->reconnect_requested); lua_pop(L, 1); } @@ -37,6 +43,8 @@ void ScriptApiMainMenu::handleMainMenuEvent(std::string text) { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + // Get handler function lua_getglobal(L, "core"); lua_getfield(L, -1, "event_handler"); @@ -49,14 +57,16 @@ void ScriptApiMainMenu::handleMainMenuEvent(std::string text) // Call it lua_pushstring(L, text.c_str()); - if (lua_pcall(L, 1, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 1, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } void ScriptApiMainMenu::handleMainMenuButtons(const StringMap &fields) { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + // Get handler function lua_getglobal(L, "core"); lua_getfield(L, -1, "button_handler"); @@ -79,7 +89,7 @@ void ScriptApiMainMenu::handleMainMenuButtons(const StringMap &fields) } // Call it - if (lua_pcall(L, 1, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 1, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } diff --git a/src/script/cpp_api/s_mainmenu.h b/src/script/cpp_api/s_mainmenu.h index 67bce21f..9f7e7569 100644 --- a/src/script/cpp_api/s_mainmenu.h +++ b/src/script/cpp_api/s_mainmenu.h @@ -22,16 +22,15 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "cpp_api/s_base.h" #include "util/string.h" +#include "../guiMainMenu.h" -class ScriptApiMainMenu - : virtual public ScriptApiBase -{ +class ScriptApiMainMenu : virtual public ScriptApiBase { public: /** - * set gamedata.errormessage to inform lua of an error - * @param errormessage the error message + * Hand over MainMenuDataForScript to lua to inform lua of the content + * @param data the data */ - void setMainMenuErrorMessage(std::string errormessage); + void setMainMenuData(MainMenuDataForScript *data); /** * process events received from formspec diff --git a/src/script/cpp_api/s_node.cpp b/src/script/cpp_api/s_node.cpp index fa8a998b..fb620fd7 100644 --- a/src/script/cpp_api/s_node.cpp +++ b/src/script/cpp_api/s_node.cpp @@ -57,6 +57,7 @@ struct EnumString ScriptApiNode::es_ContentParamType2[] = {CPT2_FACEDIR, "facedir"}, {CPT2_WALLMOUNTED, "wallmounted"}, {CPT2_LEVELED, "leveled"}, + {CPT2_DEGROTATE, "degrotate"}, {0, NULL}, }; @@ -95,6 +96,8 @@ bool ScriptApiNode::node_on_punch(v3s16 p, MapNode node, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // Push callback function on stack @@ -106,8 +109,8 @@ bool ScriptApiNode::node_on_punch(v3s16 p, MapNode node, pushnode(L, node, ndef); objectrefGetOrCreate(L, puncher); pushPointedThing(pointed); - if (lua_pcall(L, 4, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 4, 0, error_handler)); + lua_pop(L, 1); // Pop error handler return true; } @@ -116,6 +119,8 @@ bool ScriptApiNode::node_on_dig(v3s16 p, MapNode node, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // Push callback function on stack @@ -126,8 +131,8 @@ bool ScriptApiNode::node_on_dig(v3s16 p, MapNode node, push_v3s16(L, p); pushnode(L, node, ndef); objectrefGetOrCreate(L, digger); - if (lua_pcall(L, 3, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 3, 0, error_handler)); + lua_pop(L, 1); // Pop error handler return true; } @@ -135,6 +140,8 @@ void ScriptApiNode::node_on_construct(v3s16 p, MapNode node) { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // Push callback function on stack @@ -143,14 +150,16 @@ void ScriptApiNode::node_on_construct(v3s16 p, MapNode node) // Call function push_v3s16(L, p); - if (lua_pcall(L, 1, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 1, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } void ScriptApiNode::node_on_destruct(v3s16 p, MapNode node) { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // Push callback function on stack @@ -159,14 +168,16 @@ void ScriptApiNode::node_on_destruct(v3s16 p, MapNode node) // Call function push_v3s16(L, p); - if (lua_pcall(L, 1, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 1, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } void ScriptApiNode::node_after_destruct(v3s16 p, MapNode node) { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // Push callback function on stack @@ -176,14 +187,16 @@ void ScriptApiNode::node_after_destruct(v3s16 p, MapNode node) // Call function push_v3s16(L, p); pushnode(L, node, ndef); - if (lua_pcall(L, 2, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 2, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } bool ScriptApiNode::node_on_timer(v3s16 p, MapNode node, f32 dtime) { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // Push callback function on stack @@ -193,8 +206,8 @@ bool ScriptApiNode::node_on_timer(v3s16 p, MapNode node, f32 dtime) // Call function push_v3s16(L, p); lua_pushnumber(L,dtime); - if (lua_pcall(L, 2, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 2, 1, error_handler)); + lua_remove(L, error_handler); return (bool) lua_isboolean(L, -1) && (bool) lua_toboolean(L, -1) == true; } @@ -205,6 +218,8 @@ void ScriptApiNode::node_on_receive_fields(v3s16 p, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call @@ -229,27 +244,30 @@ void ScriptApiNode::node_on_receive_fields(v3s16 p, lua_settable(L, -3); } objectrefGetOrCreate(L, sender); // player - if (lua_pcall(L, 4, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 4, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } void ScriptApiNode::node_falling_update(v3s16 p) { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + lua_getglobal(L, "nodeupdate"); push_v3s16(L, p); - if (lua_pcall(L, 1, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 1, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } void ScriptApiNode::node_falling_update_single(v3s16 p) { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + lua_getglobal(L, "nodeupdate_single"); push_v3s16(L, p); - if (lua_pcall(L, 1, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 1, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } - diff --git a/src/script/cpp_api/s_nodemeta.cpp b/src/script/cpp_api/s_nodemeta.cpp index e112db42..c3340383 100644 --- a/src/script/cpp_api/s_nodemeta.cpp +++ b/src/script/cpp_api/s_nodemeta.cpp @@ -34,6 +34,8 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowMove(v3s16 p, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call @@ -54,13 +56,12 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowMove(v3s16 p, lua_pushinteger(L, to_index + 1); // to_index lua_pushinteger(L, count); // count objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 7, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 7, 1, error_handler)); if (!lua_isnumber(L, -1)) throw LuaError("allow_metadata_inventory_move should" " return a number, guilty node: " + nodename); int num = luaL_checkinteger(L, -1); - lua_pop(L, 1); // Pop integer + lua_pop(L, 2); // Pop integer and error handler return num; } @@ -71,6 +72,8 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowPut(v3s16 p, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call @@ -89,13 +92,12 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowPut(v3s16 p, lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 5, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 1, error_handler)); if(!lua_isnumber(L, -1)) throw LuaError("allow_metadata_inventory_put should" " return a number, guilty node: " + nodename); int num = luaL_checkinteger(L, -1); - lua_pop(L, 1); // Pop integer + lua_pop(L, 2); // Pop integer and error handler return num; } @@ -106,6 +108,8 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowTake(v3s16 p, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call @@ -124,13 +128,12 @@ int ScriptApiNodemeta::nodemeta_inventory_AllowTake(v3s16 p, lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 5, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 1, error_handler)); if (!lua_isnumber(L, -1)) throw LuaError("allow_metadata_inventory_take should" " return a number, guilty node: " + nodename); int num = luaL_checkinteger(L, -1); - lua_pop(L, 1); // Pop integer + lua_pop(L, 2); // Pop integer and error handler return num; } @@ -142,6 +145,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnMove(v3s16 p, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call @@ -162,8 +167,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnMove(v3s16 p, lua_pushinteger(L, to_index + 1); // to_index lua_pushinteger(L, count); // count objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 7, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 7, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } // Report put items @@ -173,6 +178,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnPut(v3s16 p, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call @@ -191,8 +198,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnPut(v3s16 p, lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 5, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } // Report taken items @@ -202,6 +209,8 @@ void ScriptApiNodemeta::nodemeta_inventory_OnTake(v3s16 p, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); + INodeDefManager *ndef = getServer()->ndef(); // If node doesn't exist, we don't know what callback to call @@ -220,13 +229,15 @@ void ScriptApiNodemeta::nodemeta_inventory_OnTake(v3s16 p, lua_pushinteger(L, index + 1); // index LuaItemStack::create(L, stack); // stack objectrefGetOrCreate(L, player); // player - if (lua_pcall(L, 5, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 5, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } -ScriptApiNodemeta::ScriptApiNodemeta() { +ScriptApiNodemeta::ScriptApiNodemeta() +{ } -ScriptApiNodemeta::~ScriptApiNodemeta() { +ScriptApiNodemeta::~ScriptApiNodemeta() +{ } diff --git a/src/script/cpp_api/s_player.cpp b/src/script/cpp_api/s_player.cpp index 40f3b047..88fa7df2 100644 --- a/src/script/cpp_api/s_player.cpp +++ b/src/script/cpp_api/s_player.cpp @@ -32,7 +32,7 @@ void ScriptApiPlayer::on_newplayer(ServerActiveObject *player) lua_getfield(L, -1, "registered_on_newplayers"); // Call callbacks objectrefGetOrCreate(L, player); - script_run_callbacks(L, 1, RUN_CALLBACKS_MODE_FIRST); + runCallbacks(1, RUN_CALLBACKS_MODE_FIRST); } void ScriptApiPlayer::on_dieplayer(ServerActiveObject *player) @@ -44,7 +44,7 @@ void ScriptApiPlayer::on_dieplayer(ServerActiveObject *player) lua_getfield(L, -1, "registered_on_dieplayers"); // Call callbacks objectrefGetOrCreate(L, player); - script_run_callbacks(L, 1, RUN_CALLBACKS_MODE_FIRST); + runCallbacks(1, RUN_CALLBACKS_MODE_FIRST); } bool ScriptApiPlayer::on_punchplayer(ServerActiveObject *player, @@ -65,10 +65,30 @@ bool ScriptApiPlayer::on_punchplayer(ServerActiveObject *player, push_tool_capabilities(L, *toolcap); push_v3f(L, dir); lua_pushnumber(L, damage); - script_run_callbacks(L, 6, RUN_CALLBACKS_MODE_OR); + runCallbacks(6, RUN_CALLBACKS_MODE_OR); return lua_toboolean(L, -1); } +s16 ScriptApiPlayer::on_player_hpchange(ServerActiveObject *player, + s16 hp_change) +{ + SCRIPTAPI_PRECHECKHEADER + + int error_handler = PUSH_ERROR_HANDLER(L); + + // Get core.registered_on_player_hpchange + lua_getglobal(L, "core"); + lua_getfield(L, -1, "registered_on_player_hpchange"); + lua_remove(L, -2); + + objectrefGetOrCreate(L, player); + lua_pushnumber(L, hp_change); + PCALL_RES(lua_pcall(L, 2, 1, error_handler)); + hp_change = lua_tointeger(L, -1); + lua_pop(L, 2); // Pop result and error handler + return hp_change; +} + bool ScriptApiPlayer::on_respawnplayer(ServerActiveObject *player) { SCRIPTAPI_PRECHECKHEADER @@ -78,7 +98,7 @@ bool ScriptApiPlayer::on_respawnplayer(ServerActiveObject *player) lua_getfield(L, -1, "registered_on_respawnplayers"); // Call callbacks objectrefGetOrCreate(L, player); - script_run_callbacks(L, 1, RUN_CALLBACKS_MODE_OR); + runCallbacks(1, RUN_CALLBACKS_MODE_OR); bool positioning_handled_by_some = lua_toboolean(L, -1); return positioning_handled_by_some; } @@ -95,7 +115,7 @@ bool ScriptApiPlayer::on_prejoinplayer( lua_getfield(L, -1, "registered_on_prejoinplayers"); lua_pushstring(L, name.c_str()); lua_pushstring(L, ip.c_str()); - script_run_callbacks(L, 2, RUN_CALLBACKS_MODE_OR); + runCallbacks(2, RUN_CALLBACKS_MODE_OR); if (lua_isstring(L, -1)) { reason->assign(lua_tostring(L, -1)); return true; @@ -112,7 +132,7 @@ void ScriptApiPlayer::on_joinplayer(ServerActiveObject *player) lua_getfield(L, -1, "registered_on_joinplayers"); // Call callbacks objectrefGetOrCreate(L, player); - script_run_callbacks(L, 1, RUN_CALLBACKS_MODE_FIRST); + runCallbacks(1, RUN_CALLBACKS_MODE_FIRST); } void ScriptApiPlayer::on_leaveplayer(ServerActiveObject *player) @@ -124,7 +144,7 @@ void ScriptApiPlayer::on_leaveplayer(ServerActiveObject *player) lua_getfield(L, -1, "registered_on_leaveplayers"); // Call callbacks objectrefGetOrCreate(L, player); - script_run_callbacks(L, 1, RUN_CALLBACKS_MODE_FIRST); + runCallbacks(1, RUN_CALLBACKS_MODE_FIRST); } void ScriptApiPlayer::on_cheat(ServerActiveObject *player, @@ -140,7 +160,7 @@ void ScriptApiPlayer::on_cheat(ServerActiveObject *player, lua_newtable(L); lua_pushlstring(L, cheat_type.c_str(), cheat_type.size()); lua_setfield(L, -2, "type"); - script_run_callbacks(L, 2, RUN_CALLBACKS_MODE_FIRST); + runCallbacks(2, RUN_CALLBACKS_MODE_FIRST); } void ScriptApiPlayer::on_playerReceiveFields(ServerActiveObject *player, @@ -167,11 +187,10 @@ void ScriptApiPlayer::on_playerReceiveFields(ServerActiveObject *player, lua_pushlstring(L, value.c_str(), value.size()); lua_settable(L, -3); } - script_run_callbacks(L, 3, RUN_CALLBACKS_MODE_OR_SC); + runCallbacks(3, RUN_CALLBACKS_MODE_OR_SC); } ScriptApiPlayer::~ScriptApiPlayer() { } - diff --git a/src/script/cpp_api/s_player.h b/src/script/cpp_api/s_player.h index f0f91014..cb0c97f2 100644 --- a/src/script/cpp_api/s_player.h +++ b/src/script/cpp_api/s_player.h @@ -43,6 +43,7 @@ public: bool on_punchplayer(ServerActiveObject *player, ServerActiveObject *hitter, float time_from_last_punch, const ToolCapabilities *toolcap, v3f dir, s16 damage); + s16 on_player_hpchange(ServerActiveObject *player, s16 hp_change); void on_playerReceiveFields(ServerActiveObject *player, const std::string &formname, const StringMap &fields); }; diff --git a/src/script/cpp_api/s_security.cpp b/src/script/cpp_api/s_security.cpp index 5068eb3c..133eac52 100644 --- a/src/script/cpp_api/s_security.cpp +++ b/src/script/cpp_api/s_security.cpp @@ -47,7 +47,7 @@ static inline void copy_safe(lua_State *L, const char *list[], unsigned len, int // Pushes the original version of a library function on the stack, from the old version static inline void push_original(lua_State *L, const char *lib, const char *func) { - lua_getfield(L, LUA_REGISTRYINDEX, "globals_backup"); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP); lua_getfield(L, -1, lib); lua_remove(L, -2); // Remove globals_backup lua_getfield(L, -1, func); @@ -143,7 +143,7 @@ void ScriptApiSecurity::initializeSecurity() // Backup globals to the registry lua_getglobal(L, "_G"); - lua_setfield(L, LUA_REGISTRYINDEX, "globals_backup"); + lua_rawseti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP); // Replace the global environment with an empty one #if LUA_VERSION_NUM <= 501 @@ -165,7 +165,7 @@ void ScriptApiSecurity::initializeSecurity() #endif // Get old globals - lua_getfield(L, LUA_REGISTRYINDEX, "globals_backup"); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP); int old_globals = lua_gettop(L); @@ -241,7 +241,7 @@ void ScriptApiSecurity::initializeSecurity() bool ScriptApiSecurity::isSecure(lua_State *L) { - lua_getfield(L, LUA_REGISTRYINDEX, "globals_backup"); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP); bool secure = !lua_isnil(L, -1); lua_pop(L, 1); return secure; @@ -356,7 +356,7 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path) if (!removed.empty()) abs_path += DIR_DELIM + removed; // Get server from registry - lua_getfield(L, LUA_REGISTRYINDEX, "scriptapi"); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI); ScriptApiBase *script = (ScriptApiBase *) lua_touserdata(L, -1); lua_pop(L, 1); const Server *server = script->getServer(); @@ -364,7 +364,7 @@ bool ScriptApiSecurity::checkPath(lua_State *L, const char *path) if (!server) return false; // Get mod name - lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); if (lua_isstring(L, -1)) { std::string mod_name = lua_tostring(L, -1); @@ -407,7 +407,8 @@ int ScriptApiSecurity::sl_g_dofile(lua_State *L) { int nret = sl_g_loadfile(L); if (nret != 1) { - return nret; + lua_error(L); + // code after this function isn't executed } int top_precall = lua_gettop(L); lua_call(L, 0, LUA_MULTRET); diff --git a/src/script/cpp_api/s_server.cpp b/src/script/cpp_api/s_server.cpp index 94b6c255..f9500292 100644 --- a/src/script/cpp_api/s_server.cpp +++ b/src/script/cpp_api/s_server.cpp @@ -27,14 +27,15 @@ bool ScriptApiServer::getAuth(const std::string &playername, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); getAuthHandler(); lua_getfield(L, -1, "get_auth"); if (lua_type(L, -1) != LUA_TFUNCTION) throw LuaError("Authentication handler missing get_auth"); lua_pushstring(L, playername.c_str()); - if (lua_pcall(L, 1, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 1, 1, error_handler)); lua_remove(L, -2); // Remove auth handler + lua_remove(L, error_handler); // nil = login not allowed if (lua_isnil(L, -1)) @@ -68,6 +69,9 @@ void ScriptApiServer::getAuthHandler() lua_pop(L, 1); lua_getfield(L, -1, "builtin_auth_handler"); } + + setOriginFromTable(-1); + lua_remove(L, -2); // Remove core if (lua_type(L, -1) != LUA_TTABLE) throw LuaError("Authentication handler table not valid"); @@ -97,6 +101,7 @@ void ScriptApiServer::createAuth(const std::string &playername, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); getAuthHandler(); lua_getfield(L, -1, "create_auth"); lua_remove(L, -2); // Remove auth handler @@ -104,8 +109,8 @@ void ScriptApiServer::createAuth(const std::string &playername, throw LuaError("Authentication handler missing create_auth"); lua_pushstring(L, playername.c_str()); lua_pushstring(L, password.c_str()); - if (lua_pcall(L, 2, 0, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 2, 0, error_handler)); + lua_pop(L, 1); // Pop error handler } bool ScriptApiServer::setPassword(const std::string &playername, @@ -113,6 +118,7 @@ bool ScriptApiServer::setPassword(const std::string &playername, { SCRIPTAPI_PRECHECKHEADER + int error_handler = PUSH_ERROR_HANDLER(L); getAuthHandler(); lua_getfield(L, -1, "set_password"); lua_remove(L, -2); // Remove auth handler @@ -120,8 +126,8 @@ bool ScriptApiServer::setPassword(const std::string &playername, throw LuaError("Authentication handler missing set_password"); lua_pushstring(L, playername.c_str()); lua_pushstring(L, password.c_str()); - if (lua_pcall(L, 2, 1, m_errorhandler)) - scriptError(); + PCALL_RES(lua_pcall(L, 2, 1, error_handler)); + lua_remove(L, error_handler); return lua_toboolean(L, -1); } @@ -136,7 +142,7 @@ bool ScriptApiServer::on_chat_message(const std::string &name, // Call callbacks lua_pushstring(L, name.c_str()); lua_pushstring(L, message.c_str()); - script_run_callbacks(L, 2, RUN_CALLBACKS_MODE_OR_SC); + runCallbacks(2, RUN_CALLBACKS_MODE_OR_SC); bool ate = lua_toboolean(L, -1); return ate; } @@ -149,6 +155,6 @@ void ScriptApiServer::on_shutdown() lua_getglobal(L, "core"); lua_getfield(L, -1, "registered_on_shutdown"); // Call callbacks - script_run_callbacks(L, 0, RUN_CALLBACKS_MODE_FIRST); + runCallbacks(0, RUN_CALLBACKS_MODE_FIRST); } diff --git a/src/script/lua_api/CMakeLists.txt b/src/script/lua_api/CMakeLists.txt index aaabc213..2501ce6d 100644 --- a/src/script/lua_api/CMakeLists.txt +++ b/src/script/lua_api/CMakeLists.txt @@ -1,4 +1,5 @@ set(common_SCRIPT_LUA_API_SRCS + ${CMAKE_CURRENT_SOURCE_DIR}/l_areastore.cpp ${CMAKE_CURRENT_SOURCE_DIR}/l_base.cpp ${CMAKE_CURRENT_SOURCE_DIR}/l_craft.cpp ${CMAKE_CURRENT_SOURCE_DIR}/l_env.cpp diff --git a/src/script/lua_api/l_areastore.cpp b/src/script/lua_api/l_areastore.cpp new file mode 100644 index 00000000..b5ab5f2c --- /dev/null +++ b/src/script/lua_api/l_areastore.cpp @@ -0,0 +1,402 @@ +/* +Minetest +Copyright (C) 2015 est31 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 3.0 of the License, or +(at your option) any later version. + +This program 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 Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + + +#include "lua_api/l_areastore.h" +#include "lua_api/l_internal.h" +#include "common/c_converter.h" +#include "cpp_api/s_security.h" +#include "areastore.h" +#include "filesys.h" +#ifndef ANDROID + #include "cmake_config.h" +#endif +#include + +static inline void get_data_and_border_flags(lua_State *L, u8 start_i, + bool *borders, bool *data) +{ + if (!lua_isboolean(L, start_i)) + return; + *borders = lua_toboolean(L, start_i); + if (!lua_isboolean(L, start_i + 1)) + return; + *data = lua_toboolean(L, start_i + 1); +} + +static void push_area(lua_State *L, const Area *a, + bool include_borders, bool include_data) +{ + if (!include_borders && !include_data) { + lua_pushboolean(L, true); + return; + } + lua_newtable(L); + if (include_borders) { + push_v3s16(L, a->minedge); + lua_setfield(L, -2, "min"); + push_v3s16(L, a->maxedge); + lua_setfield(L, -2, "max"); + } + if (include_data) { + lua_pushlstring(L, a->data.c_str(), a->data.size()); + lua_setfield(L, -2, "data"); + } +} + +static inline void push_areas(lua_State *L, const std::vector &areas, + bool borders, bool data) +{ + lua_newtable(L); + size_t cnt = areas.size(); + for (size_t i = 0; i < cnt; i++) { + lua_pushnumber(L, areas[i]->id); + push_area(L, areas[i], borders, data); + lua_settable(L, -3); + } +} + +// garbage collector +int LuaAreaStore::gc_object(lua_State *L) +{ + LuaAreaStore *o = *(LuaAreaStore **)(lua_touserdata(L, 1)); + delete o; + return 0; +} + +// get_area(id, include_borders, include_data) +int LuaAreaStore::l_get_area(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + u32 id = luaL_checknumber(L, 2); + + bool include_borders = true; + bool include_data = false; + get_data_and_border_flags(L, 3, &include_borders, &include_data); + + const Area *res; + + res = ast->getArea(id); + push_area(L, res, include_borders, include_data); + + return 1; +} + +// get_areas_for_pos(pos, include_borders, include_data) +int LuaAreaStore::l_get_areas_for_pos(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + v3s16 pos = check_v3s16(L, 2); + + bool include_borders = true; + bool include_data = false; + get_data_and_border_flags(L, 3, &include_borders, &include_data); + + std::vector res; + + ast->getAreasForPos(&res, pos); + push_areas(L, res, include_borders, include_data); + + return 1; +} + +// get_areas_in_area(edge1, edge2, accept_overlap, include_borders, include_data) +int LuaAreaStore::l_get_areas_in_area(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + v3s16 minedge = check_v3s16(L, 2); + v3s16 maxedge = check_v3s16(L, 3); + + bool include_borders = true; + bool include_data = false; + bool accept_overlap = false; + if (lua_isboolean(L, 4)) { + accept_overlap = lua_toboolean(L, 4); + get_data_and_border_flags(L, 5, &include_borders, &include_data); + } + std::vector res; + + ast->getAreasInArea(&res, minedge, maxedge, accept_overlap); + push_areas(L, res, include_borders, include_data); + + return 1; +} + +// insert_area(edge1, edge2, data) +int LuaAreaStore::l_insert_area(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + Area a; + + a.minedge = check_v3s16(L, 2); + a.maxedge = check_v3s16(L, 3); + + a.extremifyEdges(); + a.id = ast->getFreeId(a.minedge, a.maxedge); + + if (a.id == AREA_ID_INVALID) { + // couldn't get free id + lua_pushnil(L); + return 1; + } + + size_t d_len; + const char *data = luaL_checklstring(L, 4, &d_len); + + a.data = std::string(data, d_len); + + ast->insertArea(a); + + lua_pushnumber(L, a.id); + return 1; +} + +// reserve(count) +int LuaAreaStore::l_reserve(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + size_t count = luaL_checknumber(L, 2); + ast->reserve(count); + return 0; +} + +// remove_area(id) +int LuaAreaStore::l_remove_area(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + u32 id = luaL_checknumber(L, 2); + bool success = ast->removeArea(id); + + lua_pushboolean(L, success); + return 1; +} + +// set_cache_params(params) +int LuaAreaStore::l_set_cache_params(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + luaL_checktype(L, 2, LUA_TTABLE); + + bool enabled = getboolfield_default(L, 2, "enabled", true); + u8 block_radius = getintfield_default(L, 2, "block_radius", 64); + size_t limit = getintfield_default(L, 2, "block_radius", 1000); + + ast->setCacheParams(enabled, block_radius, limit); + + return 0; +} + +#if 0 +// to_string() +int LuaAreaStore::l_to_string(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + std::ostringstream os(std::ios_base::binary); + ast->serialize(os); + std::string str = os.str(); + + lua_pushlstring(L, str.c_str(), str.length()); + return 1; +} + +// to_file(filename) +int LuaAreaStore::l_to_file(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + const char *filename = luaL_checkstring(L, 2); + CHECK_SECURE_PATH_OPTIONAL(L, filename); + + std::ostringstream os(std::ios_base::binary); + ast->serialize(os); + + lua_pushboolean(L, fs::safeWriteToFile(filename, os.str())); + return 1; +} + +// from_string(str) +int LuaAreaStore::l_from_string(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + size_t len; + const char *str = luaL_checklstring(L, 2, &len); + + std::istringstream is(std::string(str, len), std::ios::binary); + bool success = ast->deserialize(is); + + lua_pushboolean(L, success); + return 1; +} + +// from_file(filename) +int LuaAreaStore::l_from_file(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = checkobject(L, 1); + AreaStore *ast = o->as; + + const char *filename = luaL_checkstring(L, 2); + CHECK_SECURE_PATH_OPTIONAL(L, filename); + + std::ifstream is(filename, std::ios::binary); + bool success = ast->deserialize(is); + + lua_pushboolean(L, success); + return 1; +} +#endif + +LuaAreaStore::LuaAreaStore() +{ +#if USE_SPATIAL + this->as = new SpatialAreaStore(); +#else + this->as = new VectorAreaStore(); +#endif +} + +LuaAreaStore::LuaAreaStore(const std::string &type) +{ +#if USE_SPATIAL + if (type == "LibSpatial") { + this->as = new SpatialAreaStore(); + } else +#endif + { + this->as = new VectorAreaStore(); + } +} + +LuaAreaStore::~LuaAreaStore() +{ + delete as; +} + +// LuaAreaStore() +// Creates an LuaAreaStore and leaves it on top of stack +int LuaAreaStore::create_object(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + LuaAreaStore *o = (lua_isstring(L, 1)) ? + new LuaAreaStore(lua_tostring(L, 1)) : + new LuaAreaStore(); + + *(void **)(lua_newuserdata(L, sizeof(void *))) = o; + luaL_getmetatable(L, className); + lua_setmetatable(L, -2); + return 1; +} + +LuaAreaStore *LuaAreaStore::checkobject(lua_State *L, int narg) +{ + NO_MAP_LOCK_REQUIRED; + + luaL_checktype(L, narg, LUA_TUSERDATA); + + void *ud = luaL_checkudata(L, narg, className); + if (!ud) + luaL_typerror(L, narg, className); + + return *(LuaAreaStore **)ud; // unbox pointer +} + +void LuaAreaStore::Register(lua_State *L) +{ + lua_newtable(L); + int methodtable = lua_gettop(L); + luaL_newmetatable(L, className); + int metatable = lua_gettop(L); + + lua_pushliteral(L, "__metatable"); + lua_pushvalue(L, methodtable); + lua_settable(L, metatable); // hide metatable from Lua getmetatable() + + lua_pushliteral(L, "__index"); + lua_pushvalue(L, methodtable); + lua_settable(L, metatable); + + lua_pushliteral(L, "__gc"); + lua_pushcfunction(L, gc_object); + lua_settable(L, metatable); + + lua_pop(L, 1); // drop metatable + + luaL_openlib(L, 0, methods, 0); // fill methodtable + lua_pop(L, 1); // drop methodtable + + // Can be created from Lua (AreaStore()) + lua_register(L, className, create_object); +} + +const char LuaAreaStore::className[] = "AreaStore"; +const luaL_reg LuaAreaStore::methods[] = { + luamethod(LuaAreaStore, get_area), + luamethod(LuaAreaStore, get_areas_for_pos), + luamethod(LuaAreaStore, get_areas_in_area), + luamethod(LuaAreaStore, insert_area), + luamethod(LuaAreaStore, reserve), + luamethod(LuaAreaStore, remove_area), + luamethod(LuaAreaStore, set_cache_params), + /* luamethod(LuaAreaStore, to_string), + luamethod(LuaAreaStore, to_file), + luamethod(LuaAreaStore, from_string), + luamethod(LuaAreaStore, from_file),*/ + {0,0} +}; diff --git a/src/script/lua_api/l_areastore.h b/src/script/lua_api/l_areastore.h new file mode 100644 index 00000000..f8e0e85b --- /dev/null +++ b/src/script/lua_api/l_areastore.h @@ -0,0 +1,70 @@ +/* +Minetest +Copyright (C) 2015 est31 + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 3.0 of the License, or +(at your option) any later version. + +This program 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 Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef L_AREASTORE_H_ +#define L_AREASTORE_H_ + +#include "lua_api/l_base.h" +#include "irr_v3d.h" +#include "areastore.h" + +/* + AreaStore + */ +class LuaAreaStore : public ModApiBase { +private: + + static const char className[]; + static const luaL_reg methods[]; + + static int gc_object(lua_State *L); + + static int l_get_area(lua_State *L); + + static int l_get_areas_for_pos(lua_State *L); + static int l_get_areas_in_area(lua_State *L); + static int l_insert_area(lua_State *L); + static int l_reserve(lua_State *L); + static int l_remove_area(lua_State *L); + + static int l_set_cache_params(lua_State *L); + + /* static int l_to_string(lua_State *L); + static int l_to_file(lua_State *L); + + static int l_from_string(lua_State *L); + static int l_from_file(lua_State *L); */ + +public: + AreaStore *as; + + LuaAreaStore(); + LuaAreaStore(const std::string &type); + ~LuaAreaStore(); + + // AreaStore() + // Creates a AreaStore and leaves it on top of stack + static int create_object(lua_State *L); + + static LuaAreaStore *checkobject(lua_State *L, int narg); + + static void Register(lua_State *L); +}; + +#endif /* L_AREASTORE_H_ */ diff --git a/src/script/lua_api/l_base.cpp b/src/script/lua_api/l_base.cpp index f445bf3c..ca675829 100644 --- a/src/script/lua_api/l_base.cpp +++ b/src/script/lua_api/l_base.cpp @@ -26,7 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc., ScriptApiBase *ModApiBase::getScriptApiBase(lua_State *L) { // Get server from registry - lua_getfield(L, LUA_REGISTRYINDEX, "scriptapi"); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_SCRIPTAPI); ScriptApiBase *sapi_ptr = (ScriptApiBase*) lua_touserdata(L, -1); lua_pop(L, 1); return sapi_ptr; @@ -49,7 +49,7 @@ GUIEngine *ModApiBase::getGuiEngine(lua_State *L) std::string ModApiBase::getCurrentModPath(lua_State *L) { - lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); const char *current_mod_name = lua_tostring(L, -1); if (!current_mod_name) return "."; diff --git a/src/script/lua_api/l_craft.cpp b/src/script/lua_api/l_craft.cpp index 5d403c0c..ffa4eb56 100644 --- a/src/script/lua_api/l_craft.cpp +++ b/src/script/lua_api/l_craft.cpp @@ -303,18 +303,23 @@ int ModApiCraft::l_get_craft_result(lua_State *L) ICraftDefManager *cdef = gdef->cdef(); CraftInput input(method, width, items); CraftOutput output; - bool got = cdef->getCraftResult(input, output, true, gdef); + std::vector output_replacements; + bool got = cdef->getCraftResult(input, output, output_replacements, true, gdef); lua_newtable(L); // output table - if(got){ + if (got) { ItemStack item; item.deSerialize(output.item, gdef->idef()); LuaItemStack::create(L, item); lua_setfield(L, -2, "item"); setintfield(L, -1, "time", output.time); + push_items(L, output_replacements); + lua_setfield(L, -2, "replacements"); } else { LuaItemStack::create(L, ItemStack()); lua_setfield(L, -2, "item"); setintfield(L, -1, "time", 0); + lua_newtable(L); + lua_setfield(L, -2, "replacements"); } lua_newtable(L); // decremented input table lua_pushstring(L, method_s.c_str()); @@ -327,7 +332,7 @@ int ModApiCraft::l_get_craft_result(lua_State *L) } -void push_craft_recipe(lua_State *L, IGameDef *gdef, +static void push_craft_recipe(lua_State *L, IGameDef *gdef, const CraftDefinition *recipe, const CraftOutput &tmpout) { @@ -358,11 +363,11 @@ void push_craft_recipe(lua_State *L, IGameDef *gdef, lua_pushstring(L, "unknown"); } lua_setfield(L, -2, "type"); - lua_pushstring(L, tmpout.item.c_str()); + lua_pushstring(L, output.item.c_str()); lua_setfield(L, -2, "output"); } -void push_craft_recipes(lua_State *L, IGameDef *gdef, +static void push_craft_recipes(lua_State *L, IGameDef *gdef, const std::vector &recipes, const CraftOutput &output) { diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp index 92d6ce41..06928b2f 100644 --- a/src/script/lua_api/l_env.cpp +++ b/src/script/lua_api/l_env.cpp @@ -33,12 +33,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/pointedthing.h" #include "content_sao.h" #include "treegen.h" +#include "emerge.h" #include "pathfinder.h" -#define GET_ENV_PTR ServerEnvironment* env = \ - dynamic_cast(getEnv(L)); \ - if (env == NULL) return 0 - /////////////////////////////////////////////////////////////////////////////// @@ -52,8 +49,7 @@ void LuaABM::trigger(ServerEnvironment *env, v3s16 p, MapNode n, sanity_check(lua_checkstack(L, 20)); StackUnroller stack_unroller(L); - lua_pushcfunction(L, script_error_handler); - int errorhandler = lua_gettop(L); + int error_handler = PUSH_ERROR_HANDLER(L); // Get registered_abms lua_getglobal(L, "core"); @@ -68,6 +64,8 @@ void LuaABM::trigger(ServerEnvironment *env, v3s16 p, MapNode n, FATAL_ERROR(""); lua_remove(L, -2); // Remove registered_abms + scriptIface->setOriginFromTable(-1); + // Call action luaL_checktype(L, -1, LUA_TTABLE); lua_getfield(L, -1, "action"); @@ -77,8 +75,11 @@ void LuaABM::trigger(ServerEnvironment *env, v3s16 p, MapNode n, pushnode(L, n, env->getGameDef()->ndef()); lua_pushnumber(L, active_object_count); lua_pushnumber(L, active_object_count_wider); - if(lua_pcall(L, 4, 0, errorhandler)) - script_error(L); + + int result = lua_pcall(L, 4, 0, error_handler); + if (result) + scriptIface->scriptError(result, "LuaABM::trigger"); + lua_pop(L, 1); // Pop error handler } @@ -407,8 +408,7 @@ int ModApiEnvMod::l_add_item(lua_State *L) if(item.empty() || !item.isKnown(getServer(L)->idef())) return 0; - lua_pushcfunction(L, script_error_handler); - int errorhandler = lua_gettop(L); + int error_handler = PUSH_ERROR_HANDLER(L); // Use spawn_item to spawn a __builtin:item lua_getglobal(L, "core"); @@ -418,9 +418,10 @@ int ModApiEnvMod::l_add_item(lua_State *L) return 0; lua_pushvalue(L, 1); lua_pushstring(L, item.getItemString().c_str()); - if(lua_pcall(L, 2, 1, errorhandler)) - script_error(L); - lua_remove(L, errorhandler); // Remove error handler + + PCALL_RESL(L, lua_pcall(L, 2, 1, error_handler)); + + lua_remove(L, error_handler); return 1; } @@ -572,19 +573,28 @@ int ModApiEnvMod::l_find_nodes_in_area(lua_State *L) ndef->getIds(lua_tostring(L, 3), filter); } + std::map individual_count; + lua_newtable(L); u64 i = 0; - for(s16 x = minp.X; x <= maxp.X; x++) - for(s16 y = minp.Y; y <= maxp.Y; y++) - for(s16 z = minp.Z; z <= maxp.Z; z++) { - v3s16 p(x, y, z); - content_t c = env->getMap().getNodeNoEx(p).getContent(); - if(filter.count(c) != 0) { - push_v3s16(L, p); - lua_rawseti(L, -2, ++i); - } + for (s16 x = minp.X; x <= maxp.X; x++) + for (s16 y = minp.Y; y <= maxp.Y; y++) + for (s16 z = minp.Z; z <= maxp.Z; z++) { + v3s16 p(x, y, z); + content_t c = env->getMap().getNodeNoEx(p).getContent(); + if (filter.count(c) != 0) { + push_v3s16(L, p); + lua_rawseti(L, -2, ++i); + individual_count[c]++; + } } - return 1; + lua_newtable(L); + for (std::set::iterator it = filter.begin(); + it != filter.end(); ++it) { + lua_pushnumber(L, individual_count[*it]); + lua_setfield(L, -2, ndef->get(*it).name.c_str()); + } + return 2; } // find_nodes_in_area_under_air(minp, maxp, nodenames) -> list of positions @@ -644,7 +654,7 @@ int ModApiEnvMod::l_find_nodes_in_area_under_air(lua_State *L) // returns world-specific PerlinNoise int ModApiEnvMod::l_get_perlin(lua_State *L) { - GET_ENV_PTR; + GET_ENV_PTR_NO_MAP_LOCK; NoiseParams params; @@ -670,7 +680,7 @@ int ModApiEnvMod::l_get_perlin(lua_State *L) // returns world-specific PerlinNoiseMap int ModApiEnvMod::l_get_perlin_map(lua_State *L) { - GET_ENV_PTR; + GET_ENV_PTR_NO_MAP_LOCK; NoiseParams np; if (!read_noiseparams(L, 1, &np)) @@ -738,6 +748,29 @@ int ModApiEnvMod::l_line_of_sight(lua_State *L) return 1; } + +// emerge_area(p1, p2) +// emerge mapblocks in area p1..p2 +int ModApiEnvMod::l_emerge_area(lua_State *L) +{ + GET_ENV_PTR; + + EmergeManager *emerge = getServer(L)->getEmergeManager(); + + v3s16 bpmin = getNodeBlockPos(read_v3s16(L, 1)); + v3s16 bpmax = getNodeBlockPos(read_v3s16(L, 2)); + sortBoxVerticies(bpmin, bpmax); + + for (s16 z = bpmin.Z; z <= bpmax.Z; z++) + for (s16 y = bpmin.Y; y <= bpmax.Y; y++) + for (s16 x = bpmin.X; x <= bpmax.X; x++) { + v3s16 chunkpos(x, y, z); + emerge->enqueueBlockEmerge(PEER_ID_INEXISTENT, chunkpos, false, true); + } + + return 0; +} + // delete_area(p1, p2) // delete mapblocks in area p1..p2 int ModApiEnvMod::l_delete_area(lua_State *L) @@ -758,10 +791,12 @@ int ModApiEnvMod::l_delete_area(lua_State *L) for (s16 y = bpmin.Y; y <= bpmax.Y; y++) for (s16 x = bpmin.X; x <= bpmax.X; x++) { v3s16 bp(x, y, z); - if (map.deleteBlock(bp)) + if (map.deleteBlock(bp)) { + env->setStaticForActiveObjectsInBlock(bp, false); event.modified_blocks.insert(bp); - else + } else { success = false; + } } map.dispatchEvent(&event); @@ -903,19 +938,6 @@ int ModApiEnvMod::l_forceload_free_block(lua_State *L) return 0; } -// get_us_time() -int ModApiEnvMod::l_get_us_time(lua_State *L) -{ - lua_pushnumber(L, porting::getTimeUs()); - return 1; -} - -int ModApiEnvMod::l_get_project_name(lua_State *L) -{ - lua_pushstring(L, PROJECT_NAME); - return 1; -} - void ModApiEnvMod::Initialize(lua_State *L, int top) { API_FCT(set_node); @@ -945,6 +967,7 @@ void ModApiEnvMod::Initialize(lua_State *L, int top) API_FCT(find_node_near); API_FCT(find_nodes_in_area); API_FCT(find_nodes_in_area_under_air); + API_FCT(emerge_area); API_FCT(delete_area); API_FCT(get_perlin); API_FCT(get_perlin_map); @@ -956,6 +979,4 @@ void ModApiEnvMod::Initialize(lua_State *L, int top) API_FCT(transforming_liquid_add); API_FCT(forceload_block); API_FCT(forceload_free_block); - API_FCT(get_us_time); - API_FCT(get_project_name); } diff --git a/src/script/lua_api/l_env.h b/src/script/lua_api/l_env.h index 841d699a..7542edfb 100644 --- a/src/script/lua_api/l_env.h +++ b/src/script/lua_api/l_env.h @@ -125,6 +125,9 @@ private: // nodenames: eg. {"ignore", "group:tree"} or "default:dirt" static int l_find_nodes_in_area_under_air(lua_State *L); + // emerge_area(p1, p2) + static int l_emerge_area(lua_State *L); + // delete_area(p1, p2) -> true/false static int l_delete_area(lua_State *L); @@ -165,11 +168,6 @@ private: // stops forceloading a position static int l_forceload_free_block(lua_State *L); - // get us precision time - static int l_get_us_time(lua_State *L); - - static int l_get_project_name(lua_State *L); - public: static void Initialize(lua_State *L, int top); }; @@ -183,16 +181,18 @@ private: std::set m_required_neighbors; float m_trigger_interval; u32 m_trigger_chance; + bool m_simple_catch_up; public: LuaABM(lua_State *L, int id, const std::set &trigger_contents, const std::set &required_neighbors, - float trigger_interval, u32 trigger_chance): + float trigger_interval, u32 trigger_chance, bool simple_catch_up): m_id(id), m_trigger_contents(trigger_contents), m_required_neighbors(required_neighbors), m_trigger_interval(trigger_interval), - m_trigger_chance(trigger_chance) + m_trigger_chance(trigger_chance), + m_simple_catch_up(simple_catch_up) { } virtual std::set getTriggerContents() @@ -211,6 +211,10 @@ public: { return m_trigger_chance; } + virtual bool getSimpleCatchUp() + { + return m_simple_catch_up; + } virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n, u32 active_object_count, u32 active_object_count_wider); }; diff --git a/src/script/lua_api/l_internal.h b/src/script/lua_api/l_internal.h index cb2ad1f5..42b59fd8 100644 --- a/src/script/lua_api/l_internal.h +++ b/src/script/lua_api/l_internal.h @@ -33,12 +33,26 @@ with this program; if not, write to the Free Software Foundation, Inc., #define API_FCT(name) registerFunction(L, #name, l_##name,top) #define ASYNC_API_FCT(name) engine.registerFunction(#name, l_##name) -#if (defined(WIN32) || defined(_WIN32_WCE)) +#define MAP_LOCK_REQUIRED #define NO_MAP_LOCK_REQUIRED + +/* +#if (defined(WIN32) || defined(_WIN32_WCE)) + #define NO_MAP_LOCK_REQUIRED #else -#include "profiler.h" -#define NO_MAP_LOCK_REQUIRED \ - ScopeProfiler nolocktime(g_profiler,"Scriptapi: unlockable time",SPT_ADD) + #include "profiler.h" + #define NO_MAP_LOCK_REQUIRED \ + ScopeProfiler nolocktime(g_profiler,"Scriptapi: unlockable time",SPT_ADD) #endif +*/ + +#define GET_ENV_PTR_NO_MAP_LOCK \ + ServerEnvironment *env = (ServerEnvironment *)getEnv(L); \ + if (env == NULL) \ + return 0 + +#define GET_ENV_PTR \ + MAP_LOCK_REQUIRED; \ + GET_ENV_PTR_NO_MAP_LOCK #endif /* L_INTERNAL_H_ */ diff --git a/src/script/lua_api/l_inventory.cpp b/src/script/lua_api/l_inventory.cpp index 5e160a2c..8ef33f1a 100644 --- a/src/script/lua_api/l_inventory.cpp +++ b/src/script/lua_api/l_inventory.cpp @@ -491,6 +491,7 @@ int ModApiInventory::l_get_inventory(lua_State *L) std::string type = checkstringfield(L, 1, "type"); if(type == "node"){ + MAP_LOCK_REQUIRED; lua_getfield(L, 1, "pos"); v3s16 pos = check_v3s16(L, -1); loc.setNodeMeta(pos); @@ -514,7 +515,7 @@ int ModApiInventory::l_get_inventory(lua_State *L) InvRef::create(L, loc); else lua_pushnil(L); - return 1; + return 1; // END NO_MAP_LOCK_REQUIRED; } } diff --git a/src/script/lua_api/l_mainmenu.cpp b/src/script/lua_api/l_mainmenu.cpp index 7fee6247..232a8533 100644 --- a/src/script/lua_api/l_mainmenu.cpp +++ b/src/script/lua_api/l_mainmenu.cpp @@ -114,15 +114,19 @@ int ModApiMainMenu::l_start(lua_State *L) bool valid = false; + MainMenuData *data = engine->m_data; - engine->m_data->selected_world = getIntegerData(L, "selected_world",valid) -1; - engine->m_data->simple_singleplayer_mode = getBoolData(L,"singleplayer",valid); - engine->m_data->name = getTextData(L,"playername"); - engine->m_data->password = getTextData(L,"password"); - engine->m_data->address = getTextData(L,"address"); - engine->m_data->port = getTextData(L,"port"); - engine->m_data->serverdescription = getTextData(L,"serverdescription"); - engine->m_data->servername = getTextData(L,"servername"); + data->selected_world = getIntegerData(L, "selected_world",valid) -1; + data->simple_singleplayer_mode = getBoolData(L,"singleplayer",valid); + data->do_reconnect = getBoolData(L, "do_reconnect", valid); + if (!data->do_reconnect) { + data->name = getTextData(L,"playername"); + data->password = getTextData(L,"password"); + data->address = getTextData(L,"address"); + data->port = getTextData(L,"port"); + } + data->serverdescription = getTextData(L,"serverdescription"); + data->servername = getTextData(L,"servername"); //close menu next time engine->m_startgame = true; @@ -210,7 +214,7 @@ int ModApiMainMenu::l_get_table_index(lua_State *L) GUIEngine* engine = getGuiEngine(L); sanity_check(engine != NULL); - std::wstring tablename(narrow_to_wide(luaL_checkstring(L, 1))); + std::string tablename(luaL_checkstring(L, 1)); GUITable *table = engine->m_menu->getTable(tablename); s32 selection = table ? table->getSelected() : 0; @@ -702,16 +706,13 @@ int ModApiMainMenu::l_set_topleft_text(lua_State *L) /******************************************************************************/ int ModApiMainMenu::l_get_mapgen_names(lua_State *L) { + std::vector names; + EmergeManager::getMapgenNames(&names, lua_toboolean(L, 1)); + lua_newtable(L); - - std::list names; - EmergeManager::getMapgenNames(names); - - int i = 1; - for (std::list::const_iterator - it = names.begin(); it != names.end(); ++it) { - lua_pushstring(L, *it); - lua_rawseti(L, -2, i++); + for (size_t i = 0; i != names.size(); i++) { + lua_pushstring(L, names[i]); + lua_rawseti(L, -2, i + 1); } return 1; @@ -721,8 +722,8 @@ int ModApiMainMenu::l_get_mapgen_names(lua_State *L) /******************************************************************************/ int ModApiMainMenu::l_get_modpath(lua_State *L) { - std::string modpath - = fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM + "files" + DIR_DELIM); + std::string modpath = fs::RemoveRelativePathComponents( + porting::path_user + DIR_DELIM + "mods" + DIR_DELIM); lua_pushstring(L, modpath.c_str()); return 1; } @@ -730,8 +731,8 @@ int ModApiMainMenu::l_get_modpath(lua_State *L) /******************************************************************************/ int ModApiMainMenu::l_get_gamepath(lua_State *L) { - std::string gamepath - = fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM + "games" + DIR_DELIM); + std::string gamepath = fs::RemoveRelativePathComponents( + porting::path_user + DIR_DELIM + "games" + DIR_DELIM); lua_pushstring(L, gamepath.c_str()); return 1; } @@ -739,44 +740,46 @@ int ModApiMainMenu::l_get_gamepath(lua_State *L) /******************************************************************************/ int ModApiMainMenu::l_get_texturepath(lua_State *L) { - std::string gamepath - = fs::RemoveRelativePathComponents(porting::path_user + DIR_DELIM + "textures"); + std::string gamepath = fs::RemoveRelativePathComponents( + porting::path_user + DIR_DELIM + "textures"); lua_pushstring(L, gamepath.c_str()); return 1; } int ModApiMainMenu::l_get_texturepath_share(lua_State *L) { - std::string gamepath - = fs::RemoveRelativePathComponents(porting::path_share + DIR_DELIM + "textures"); + std::string gamepath = fs::RemoveRelativePathComponents( + porting::path_share + DIR_DELIM + "textures"); lua_pushstring(L, gamepath.c_str()); return 1; } /******************************************************************************/ int ModApiMainMenu::l_create_dir(lua_State *L) { - const char *path = luaL_checkstring(L, 1); + const char *path = luaL_checkstring(L, 1); if (ModApiMainMenu::isMinetestPath(path)) { - lua_pushboolean(L,fs::CreateAllDirs(path)); + lua_pushboolean(L, fs::CreateAllDirs(path)); return 1; } - lua_pushboolean(L,false); + + lua_pushboolean(L, false); return 1; } /******************************************************************************/ int ModApiMainMenu::l_delete_dir(lua_State *L) { - const char *path = luaL_checkstring(L, 1); + const char *path = luaL_checkstring(L, 1); std::string absolute_path = fs::RemoveRelativePathComponents(path); if (ModApiMainMenu::isMinetestPath(absolute_path)) { - lua_pushboolean(L,fs::RecursiveDelete(absolute_path)); + lua_pushboolean(L, fs::RecursiveDelete(absolute_path)); return 1; } - lua_pushboolean(L,false); + + lua_pushboolean(L, false); return 1; } @@ -1056,8 +1059,8 @@ int ModApiMainMenu::l_get_video_modes(lua_State *L) /******************************************************************************/ int ModApiMainMenu::l_gettext(lua_State *L) { - std::wstring wtext = wstrgettext((std::string) luaL_checkstring(L, 1)); - lua_pushstring(L, wide_to_narrow(wtext).c_str()); + std::string text = strgettext(std::string(luaL_checkstring(L, 1))); + lua_pushstring(L, text.c_str()); return 1; } diff --git a/src/script/lua_api/l_mainmenu.h b/src/script/lua_api/l_mainmenu.h index 3b9a8e1d..75b77ece 100644 --- a/src/script/lua_api/l_mainmenu.h +++ b/src/script/lua_api/l_mainmenu.h @@ -119,8 +119,6 @@ private: static int l_get_texturepath_share(lua_State *L); - static int l_get_dirlist(lua_State *L); - static int l_create_dir(lua_State *L); static int l_delete_dir(lua_State *L); diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index f789eb80..45e0c94c 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -70,6 +70,7 @@ struct EnumString ModApiMapgen::es_OreType[] = { {ORE_SCATTER, "scatter"}, {ORE_SHEET, "sheet"}, + {ORE_PUFF, "puff"}, {ORE_BLOB, "blob"}, {ORE_VEIN, "vein"}, {0, NULL}, @@ -374,8 +375,8 @@ Biome *read_biome_def(lua_State *L, int index, INodeDefManager *ndef) Biome *b = BiomeManager::create(biometype); b->name = getstringfield_default(L, index, "name", ""); - b->depth_top = getintfield_default(L, index, "depth_top", 1); - b->depth_filler = getintfield_default(L, index, "depth_filler", 2); + b->depth_top = getintfield_default(L, index, "depth_top", 0); + b->depth_filler = getintfield_default(L, index, "depth_filler", -31000); b->depth_water_top = getintfield_default(L, index, "depth_water_top", 0); b->y_min = getintfield_default(L, index, "y_min", -31000); b->y_max = getintfield_default(L, index, "y_max", 31000); @@ -449,10 +450,38 @@ size_t get_biome_list(lua_State *L, int index, /////////////////////////////////////////////////////////////////////////////// +// get_biome_id(biomename) +// returns the biome id used in biomemap +int ModApiMapgen::l_get_biome_id(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + + const char *biome_str = lua_tostring(L, 1); + if (!biome_str) + return 0; + + BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr; + + if (!bmgr) + return 0; + + Biome *biome = (Biome *)bmgr->getByName(biome_str); + + if (!biome || biome->index == OBJDEF_INVALID_INDEX) + return 0; + + lua_pushinteger(L, biome->index); + + return 1; +} + + // get_mapgen_object(objectname) // returns the requested object used during map generation int ModApiMapgen::l_get_mapgen_object(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + const char *mgobjstr = lua_tostring(L, 1); int mgobjint; @@ -464,7 +493,7 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L) EmergeManager *emerge = getServer(L)->getEmergeManager(); Mapgen *mg = emerge->getCurrentMapgen(); if (!mg) - return 0; + throw LuaError("Must only be called in a mapgen thread!"); size_t maplen = mg->csize.X * mg->csize.Z; @@ -510,21 +539,26 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L) return 1; } - case MGOBJ_HEATMAP: { // Mapgen V7 specific objects - case MGOBJ_HUMIDMAP: - if (strcmp(emerge->params.mg_name.c_str(), "v7")) - return 0; - - MapgenV7 *mgv7 = (MapgenV7 *)mg; - - float *arr = (mgobj == MGOBJ_HEATMAP) ? - mgv7->noise_heat->result : mgv7->noise_humidity->result; - if (!arr) + case MGOBJ_HEATMAP: { + if (!mg->heatmap) return 0; lua_newtable(L); for (size_t i = 0; i != maplen; i++) { - lua_pushnumber(L, arr[i]); + lua_pushnumber(L, mg->heatmap[i]); + lua_rawseti(L, -2, i + 1); + } + + return 1; + } + + case MGOBJ_HUMIDMAP: { + if (!mg->humidmap) + return 0; + + lua_newtable(L); + for (size_t i = 0; i != maplen; i++) { + lua_pushnumber(L, mg->humidmap[i]); lua_rawseti(L, -2, i + 1); } @@ -558,6 +592,8 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L) int ModApiMapgen::l_get_mapgen_params(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + MapgenParams *params = &getServer(L)->getEmergeManager()->params; lua_newtable(L); @@ -574,7 +610,7 @@ int ModApiMapgen::l_get_mapgen_params(lua_State *L) lua_pushinteger(L, params->chunksize); lua_setfield(L, -2, "chunksize"); - std::string flagstr = writeFlagString(params->flags, flagdesc_mapgen, (u32)-1); + std::string flagstr = writeFlagString(params->flags, flagdesc_mapgen, U32_MAX); lua_pushstring(L, flagstr.c_str()); lua_setfield(L, -2, "flags"); @@ -586,10 +622,16 @@ int ModApiMapgen::l_get_mapgen_params(lua_State *L) // set mapgen parameters int ModApiMapgen::l_set_mapgen_params(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + if (!lua_istable(L, 1)) return 0; - MapgenParams *params = &getServer(L)->getEmergeManager()->params; + EmergeManager *emerge = getServer(L)->getEmergeManager(); + if (emerge->isRunning()) + throw LuaError("Cannot set parameters while mapgen is running"); + + MapgenParams *params = &emerge->params; u32 flags = 0, flagmask = 0; lua_getfield(L, 1, "mgname"); @@ -607,6 +649,10 @@ int ModApiMapgen::l_set_mapgen_params(lua_State *L) if (lua_isnumber(L, -1)) params->water_level = lua_tointeger(L, -1); + lua_getfield(L, 1, "chunksize"); + if (lua_isnumber(L, -1)) + params->chunksize = lua_tointeger(L, -1); + warn_if_field_exists(L, 1, "flagmask", "Deprecated: flags field now includes unset flags."); lua_getfield(L, 1, "flagmask"); @@ -626,6 +672,8 @@ int ModApiMapgen::l_set_mapgen_params(lua_State *L) // set global config values for noise parameters int ModApiMapgen::l_set_noiseparams(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + const char *name = luaL_checkstring(L, 1); NoiseParams np; @@ -643,6 +691,8 @@ int ModApiMapgen::l_set_noiseparams(lua_State *L) // get_noiseparams(name) int ModApiMapgen::l_get_noiseparams(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + std::string name = luaL_checkstring(L, 1); NoiseParams np; @@ -657,6 +707,8 @@ int ModApiMapgen::l_get_noiseparams(lua_State *L) // set_gen_notify(flags, {deco_id_table}) int ModApiMapgen::l_set_gen_notify(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + u32 flags = 0, flagmask = 0; EmergeManager *emerge = getServer(L)->getEmergeManager(); @@ -669,7 +721,7 @@ int ModApiMapgen::l_set_gen_notify(lua_State *L) lua_pushnil(L); while (lua_next(L, 2)) { if (lua_isnumber(L, -1)) - emerge->gen_notify_on_deco_ids.insert(lua_tonumber(L, -1)); + emerge->gen_notify_on_deco_ids.insert((u32)lua_tonumber(L, -1)); lua_pop(L, 1); } } @@ -681,6 +733,8 @@ int ModApiMapgen::l_set_gen_notify(lua_State *L) // get_gen_notify() int ModApiMapgen::l_get_gen_notify(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + EmergeManager *emerge = getServer(L)->getEmergeManager(); push_flags_string(L, flagdesc_gennotify, emerge->gen_notify_on, emerge->gen_notify_on); @@ -700,6 +754,8 @@ int ModApiMapgen::l_get_gen_notify(lua_State *L) // register_biome({lots of stuff}) int ModApiMapgen::l_register_biome(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + int index = 1; luaL_checktype(L, index, LUA_TTABLE); @@ -724,6 +780,8 @@ int ModApiMapgen::l_register_biome(lua_State *L) // register_decoration({lots of stuff}) int ModApiMapgen::l_register_decoration(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + int index = 1; luaL_checktype(L, index, LUA_TTABLE); @@ -864,6 +922,8 @@ bool read_deco_schematic(lua_State *L, SchematicManager *schemmgr, DecoSchematic // register_ore({lots of stuff}) int ModApiMapgen::l_register_ore(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + int index = 1; luaL_checktype(L, index, LUA_TTABLE); @@ -875,7 +935,7 @@ int ModApiMapgen::l_register_ore(lua_State *L) "ore_type", es_OreType, ORE_SCATTER); Ore *ore = oremgr->create(oretype); if (!ore) { - errorstream << "register_ore: ore_type " << oretype << " not implemented"; + errorstream << "register_ore: ore_type " << oretype << " not implemented\n"; return 0; } @@ -932,10 +992,43 @@ int ModApiMapgen::l_register_ore(lua_State *L) } lua_pop(L, 1); - if (oretype == ORE_VEIN) { - OreVein *orevein = (OreVein *)ore; - orevein->random_factor = getfloatfield_default(L, index, - "random_factor", 1.f); + //// Get type-specific parameters + switch (oretype) { + case ORE_SHEET: { + OreSheet *oresheet = (OreSheet *)ore; + + oresheet->column_height_min = getintfield_default(L, index, + "column_height_min", 1); + oresheet->column_height_max = getintfield_default(L, index, + "column_height_max", ore->clust_size); + oresheet->column_midpoint_factor = getfloatfield_default(L, index, + "column_midpoint_factor", 0.5f); + + break; + } + case ORE_PUFF: { + OrePuff *orepuff = (OrePuff *)ore; + + lua_getfield(L, index, "np_puff_top"); + read_noiseparams(L, -1, &orepuff->np_puff_top); + lua_pop(L, 1); + + lua_getfield(L, index, "np_puff_bottom"); + read_noiseparams(L, -1, &orepuff->np_puff_bottom); + lua_pop(L, 1); + + break; + } + case ORE_VEIN: { + OreVein *orevein = (OreVein *)ore; + + orevein->random_factor = getfloatfield_default(L, index, + "random_factor", 1.f); + + break; + } + default: + break; } ObjDefHandle handle = oremgr->add(ore); @@ -959,6 +1052,8 @@ int ModApiMapgen::l_register_ore(lua_State *L) // register_schematic({schematic}, replacements={}) int ModApiMapgen::l_register_schematic(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr; StringMap replace_names; @@ -984,6 +1079,8 @@ int ModApiMapgen::l_register_schematic(lua_State *L) // clear_registered_biomes() int ModApiMapgen::l_clear_registered_biomes(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + BiomeManager *bmgr = getServer(L)->getEmergeManager()->biomemgr; bmgr->clear(); return 0; @@ -993,6 +1090,8 @@ int ModApiMapgen::l_clear_registered_biomes(lua_State *L) // clear_registered_decorations() int ModApiMapgen::l_clear_registered_decorations(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + DecorationManager *dmgr = getServer(L)->getEmergeManager()->decomgr; dmgr->clear(); return 0; @@ -1002,6 +1101,8 @@ int ModApiMapgen::l_clear_registered_decorations(lua_State *L) // clear_registered_ores() int ModApiMapgen::l_clear_registered_ores(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + OreManager *omgr = getServer(L)->getEmergeManager()->oremgr; omgr->clear(); return 0; @@ -1011,6 +1112,8 @@ int ModApiMapgen::l_clear_registered_ores(lua_State *L) // clear_registered_schematics() int ModApiMapgen::l_clear_registered_schematics(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + SchematicManager *smgr = getServer(L)->getEmergeManager()->schemmgr; smgr->clear(); return 0; @@ -1020,6 +1123,8 @@ int ModApiMapgen::l_clear_registered_schematics(lua_State *L) // generate_ores(vm, p1, p2, [ore_id]) int ModApiMapgen::l_generate_ores(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + EmergeManager *emerge = getServer(L)->getEmergeManager(); Mapgen mg; @@ -1044,6 +1149,8 @@ int ModApiMapgen::l_generate_ores(lua_State *L) // generate_decorations(vm, p1, p2, [deco_id]) int ModApiMapgen::l_generate_decorations(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + EmergeManager *emerge = getServer(L)->getEmergeManager(); Mapgen mg; @@ -1068,6 +1175,8 @@ int ModApiMapgen::l_generate_decorations(lua_State *L) // create_schematic(p1, p2, probability_list, filename, y_slice_prob_list) int ModApiMapgen::l_create_schematic(lua_State *L) { + MAP_LOCK_REQUIRED; + INodeDefManager *ndef = getServer(L)->getNodeDefManager(); const char *filename = luaL_checkstring(L, 4); @@ -1131,6 +1240,8 @@ int ModApiMapgen::l_create_schematic(lua_State *L) // place_schematic(p, schematic, rotation, replacement) int ModApiMapgen::l_place_schematic(lua_State *L) { + MAP_LOCK_REQUIRED; + Map *map = &(getEnv(L)->getMap()); SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr; @@ -1169,6 +1280,8 @@ int ModApiMapgen::l_place_schematic(lua_State *L) // serialize_schematic(schematic, format, options={...}) int ModApiMapgen::l_serialize_schematic(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr; //// Read options @@ -1218,6 +1331,7 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L) void ModApiMapgen::Initialize(lua_State *L, int top) { + API_FCT(get_biome_id); API_FCT(get_mapgen_object); API_FCT(get_mapgen_params); diff --git a/src/script/lua_api/l_mapgen.h b/src/script/lua_api/l_mapgen.h index c44a607a..4f509e2f 100644 --- a/src/script/lua_api/l_mapgen.h +++ b/src/script/lua_api/l_mapgen.h @@ -24,6 +24,10 @@ with this program; if not, write to the Free Software Foundation, Inc., class ModApiMapgen : public ModApiBase { private: + // get_biome_id(biomename) + // returns the biome id used in biomemap + static int l_get_biome_id(lua_State *L); + // get_mapgen_object(objectname) // returns the requested object used during map generation static int l_get_mapgen_object(lua_State *L); diff --git a/src/script/lua_api/l_nodemeta.cpp b/src/script/lua_api/l_nodemeta.cpp index 04416be3..151b5cc1 100644 --- a/src/script/lua_api/l_nodemeta.cpp +++ b/src/script/lua_api/l_nodemeta.cpp @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "common/c_content.h" #include "environment.h" #include "map.h" +#include "gamedef.h" #include "nodemetadata.h" @@ -43,7 +44,7 @@ NodeMetadata* NodeMetaRef::getmeta(NodeMetaRef *ref, bool auto_create) { NodeMetadata *meta = ref->m_env->getMap().getNodeMetadata(ref->m_p); if(meta == NULL && auto_create) { - meta = new NodeMetadata(ref->m_env->getGameDef()); + meta = new NodeMetadata(ref->m_env->getGameDef()->idef()); if(!ref->m_env->getMap().setNodeMetadata(ref->m_p, meta)) { delete meta; return NULL; @@ -81,6 +82,8 @@ int NodeMetaRef::gc_object(lua_State *L) { // get_string(self, name) int NodeMetaRef::l_get_string(lua_State *L) { + MAP_LOCK_REQUIRED; + NodeMetaRef *ref = checkobject(L, 1); std::string name = luaL_checkstring(L, 2); @@ -97,6 +100,8 @@ int NodeMetaRef::l_get_string(lua_State *L) // set_string(self, name, var) int NodeMetaRef::l_set_string(lua_State *L) { + MAP_LOCK_REQUIRED; + NodeMetaRef *ref = checkobject(L, 1); std::string name = luaL_checkstring(L, 2); size_t len = 0; @@ -114,6 +119,8 @@ int NodeMetaRef::l_set_string(lua_State *L) // get_int(self, name) int NodeMetaRef::l_get_int(lua_State *L) { + MAP_LOCK_REQUIRED; + NodeMetaRef *ref = checkobject(L, 1); std::string name = lua_tostring(L, 2); @@ -130,6 +137,8 @@ int NodeMetaRef::l_get_int(lua_State *L) // set_int(self, name, var) int NodeMetaRef::l_set_int(lua_State *L) { + MAP_LOCK_REQUIRED; + NodeMetaRef *ref = checkobject(L, 1); std::string name = lua_tostring(L, 2); int a = lua_tointeger(L, 3); @@ -146,6 +155,8 @@ int NodeMetaRef::l_set_int(lua_State *L) // get_float(self, name) int NodeMetaRef::l_get_float(lua_State *L) { + MAP_LOCK_REQUIRED; + NodeMetaRef *ref = checkobject(L, 1); std::string name = lua_tostring(L, 2); @@ -162,6 +173,8 @@ int NodeMetaRef::l_get_float(lua_State *L) // set_float(self, name, var) int NodeMetaRef::l_set_float(lua_State *L) { + MAP_LOCK_REQUIRED; + NodeMetaRef *ref = checkobject(L, 1); std::string name = lua_tostring(L, 2); float a = lua_tonumber(L, 3); @@ -178,6 +191,8 @@ int NodeMetaRef::l_set_float(lua_State *L) // get_inventory(self) int NodeMetaRef::l_get_inventory(lua_State *L) { + MAP_LOCK_REQUIRED; + NodeMetaRef *ref = checkobject(L, 1); getmeta(ref, true); // try to ensure the metadata exists InvRef::createNodeMeta(L, ref->m_p); @@ -187,6 +202,8 @@ int NodeMetaRef::l_get_inventory(lua_State *L) // to_table(self) int NodeMetaRef::l_to_table(lua_State *L) { + MAP_LOCK_REQUIRED; + NodeMetaRef *ref = checkobject(L, 1); NodeMetadata *meta = getmeta(ref, true); @@ -229,6 +246,8 @@ int NodeMetaRef::l_to_table(lua_State *L) // from_table(self, table) int NodeMetaRef::l_from_table(lua_State *L) { + MAP_LOCK_REQUIRED; + NodeMetaRef *ref = checkobject(L, 1); int base = 2; diff --git a/src/script/lua_api/l_nodetimer.cpp b/src/script/lua_api/l_nodetimer.cpp index 2ff5073e..f0c78bbf 100644 --- a/src/script/lua_api/l_nodetimer.cpp +++ b/src/script/lua_api/l_nodetimer.cpp @@ -39,6 +39,7 @@ NodeTimerRef* NodeTimerRef::checkobject(lua_State *L, int narg) int NodeTimerRef::l_set(lua_State *L) { + MAP_LOCK_REQUIRED; NodeTimerRef *o = checkobject(L, 1); ServerEnvironment *env = o->m_env; if(env == NULL) return 0; @@ -50,6 +51,7 @@ int NodeTimerRef::l_set(lua_State *L) int NodeTimerRef::l_start(lua_State *L) { + MAP_LOCK_REQUIRED; NodeTimerRef *o = checkobject(L, 1); ServerEnvironment *env = o->m_env; if(env == NULL) return 0; @@ -60,6 +62,7 @@ int NodeTimerRef::l_start(lua_State *L) int NodeTimerRef::l_stop(lua_State *L) { + MAP_LOCK_REQUIRED; NodeTimerRef *o = checkobject(L, 1); ServerEnvironment *env = o->m_env; if(env == NULL) return 0; @@ -69,6 +72,7 @@ int NodeTimerRef::l_stop(lua_State *L) int NodeTimerRef::l_is_started(lua_State *L) { + MAP_LOCK_REQUIRED; NodeTimerRef *o = checkobject(L, 1); ServerEnvironment *env = o->m_env; if(env == NULL) return 0; @@ -80,6 +84,7 @@ int NodeTimerRef::l_is_started(lua_State *L) int NodeTimerRef::l_get_timeout(lua_State *L) { + MAP_LOCK_REQUIRED; NodeTimerRef *o = checkobject(L, 1); ServerEnvironment *env = o->m_env; if(env == NULL) return 0; @@ -91,6 +96,7 @@ int NodeTimerRef::l_get_timeout(lua_State *L) int NodeTimerRef::l_get_elapsed(lua_State *L) { + MAP_LOCK_REQUIRED; NodeTimerRef *o = checkobject(L, 1); ServerEnvironment *env = o->m_env; if(env == NULL) return 0; diff --git a/src/script/lua_api/l_noise.cpp b/src/script/lua_api/l_noise.cpp index f644192d..e860a273 100644 --- a/src/script/lua_api/l_noise.cpp +++ b/src/script/lua_api/l_noise.cpp @@ -410,6 +410,7 @@ const luaL_reg LuaPerlinNoiseMap::methods[] = { int LuaPseudoRandom::l_next(lua_State *L) { NO_MAP_LOCK_REQUIRED; + LuaPseudoRandom *o = checkobject(L, 1); int min = 0; int max = 32767; @@ -437,7 +438,9 @@ int LuaPseudoRandom::l_next(lua_State *L) int LuaPseudoRandom::create_object(lua_State *L) { - int seed = luaL_checknumber(L, 1); + NO_MAP_LOCK_REQUIRED; + + u64 seed = luaL_checknumber(L, 1); LuaPseudoRandom *o = new LuaPseudoRandom(seed); *(void **)(lua_newuserdata(L, sizeof(void *))) = o; luaL_getmetatable(L, className); @@ -532,8 +535,10 @@ int LuaPcgRandom::l_rand_normal_dist(lua_State *L) int LuaPcgRandom::create_object(lua_State *L) { - lua_Integer seed = luaL_checknumber(L, 1); - LuaPcgRandom *o = lua_isnumber(L, 2) ? + NO_MAP_LOCK_REQUIRED; + + u64 seed = luaL_checknumber(L, 1); + LuaPcgRandom *o = lua_isnumber(L, 2) ? new LuaPcgRandom(seed, lua_tointeger(L, 2)) : new LuaPcgRandom(seed); *(void **)(lua_newuserdata(L, sizeof(void *))) = o; diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index ead17f49..a1df4859 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -31,10 +31,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "hud.h" #include "scripting_game.h" -#define GET_ENV_PTR ServerEnvironment* env = \ - dynamic_cast(getEnv(L)); \ - if (env == NULL) return 0 - struct EnumString es_HudElementType[] = { {HUD_ELEM_IMAGE, "image"}, @@ -68,6 +64,7 @@ struct EnumString es_HudBuiltinElement[] = {HUD_FLAG_CROSSHAIR_VISIBLE, "crosshair"}, {HUD_FLAG_WIELDITEM_VISIBLE, "wielditem"}, {HUD_FLAG_BREATHBAR_VISIBLE, "breathbar"}, + {HUD_FLAG_MINIMAP_VISIBLE, "minimap"}, {0, NULL}, }; @@ -80,7 +77,7 @@ ObjectRef* ObjectRef::checkobject(lua_State *L, int narg) { luaL_checktype(L, narg, LUA_TUSERDATA); void *ud = luaL_checkudata(L, narg, className); - if(!ud) luaL_typerror(L, narg, className); + if (!ud) luaL_typerror(L, narg, className); return *(ObjectRef**)ud; // unbox pointer } @@ -93,9 +90,9 @@ ServerActiveObject* ObjectRef::getobject(ObjectRef *ref) LuaEntitySAO* ObjectRef::getluaobject(ObjectRef *ref) { ServerActiveObject *obj = getobject(ref); - if(obj == NULL) + if (obj == NULL) return NULL; - if(obj->getType() != ACTIVEOBJECT_TYPE_LUAENTITY) + if (obj->getType() != ACTIVEOBJECT_TYPE_LUAENTITY) return NULL; return (LuaEntitySAO*)obj; } @@ -103,9 +100,9 @@ LuaEntitySAO* ObjectRef::getluaobject(ObjectRef *ref) PlayerSAO* ObjectRef::getplayersao(ObjectRef *ref) { ServerActiveObject *obj = getobject(ref); - if(obj == NULL) + if (obj == NULL) return NULL; - if(obj->getType() != ACTIVEOBJECT_TYPE_PLAYER) + if (obj->getType() != ACTIVEOBJECT_TYPE_PLAYER) return NULL; return (PlayerSAO*)obj; } @@ -113,7 +110,7 @@ PlayerSAO* ObjectRef::getplayersao(ObjectRef *ref) Player* ObjectRef::getplayer(ObjectRef *ref) { PlayerSAO *playersao = getplayersao(ref); - if(playersao == NULL) + if (playersao == NULL) return NULL; return playersao->getPlayer(); } @@ -131,11 +128,22 @@ int ObjectRef::gc_object(lua_State *L) { // remove(self) int ObjectRef::l_remove(lua_State *L) { - NO_MAP_LOCK_REQUIRED; + GET_ENV_PTR; + ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; - if(co->getType() == ACTIVEOBJECT_TYPE_PLAYER) return 0; + if (co == NULL) + return 0; + if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER) + return 0; + + std::set child_ids = co->getAttachmentChildIds(); + std::set::iterator it; + for (it = child_ids.begin(); it != child_ids.end(); ++it) { + ServerActiveObject *child = env->getActiveObject(*it); + child->setAttachment(0, "", v3f(0, 0, 0), v3f(0, 0, 0)); + } + verbosestream<<"ObjectRef::l_remove(): id="<getId()<m_removed = true; return 0; @@ -148,7 +156,7 @@ int ObjectRef::l_getpos(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; v3f pos = co->getBasePosition() / BS; lua_newtable(L); lua_pushnumber(L, pos.X); @@ -167,7 +175,7 @@ int ObjectRef::l_setpos(lua_State *L) ObjectRef *ref = checkobject(L, 1); //LuaEntitySAO *co = getluaobject(ref); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // pos v3f pos = checkFloatPos(L, 2); // Do it @@ -182,7 +190,7 @@ int ObjectRef::l_moveto(lua_State *L) ObjectRef *ref = checkobject(L, 1); //LuaEntitySAO *co = getluaobject(ref); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // pos v3f pos = checkFloatPos(L, 2); // continuous @@ -200,15 +208,15 @@ int ObjectRef::l_punch(lua_State *L) ObjectRef *puncher_ref = checkobject(L, 2); ServerActiveObject *co = getobject(ref); ServerActiveObject *puncher = getobject(puncher_ref); - if(co == NULL) return 0; - if(puncher == NULL) return 0; + if (co == NULL) return 0; + if (puncher == NULL) return 0; v3f dir; - if(lua_type(L, 5) != LUA_TTABLE) + if (lua_type(L, 5) != LUA_TTABLE) dir = co->getBasePosition() - puncher->getBasePosition(); else dir = read_v3f(L, 5); float time_from_last_punch = 1000000; - if(lua_isnumber(L, 3)) + if (lua_isnumber(L, 3)) time_from_last_punch = lua_tonumber(L, 3); ToolCapabilities toolcap = read_tool_capabilities(L, 4); dir.normalize(); @@ -222,15 +230,13 @@ int ObjectRef::l_punch(lua_State *L) // If the punched is a player, and its HP changed if (src_original_hp != co->getHP() && co->getType() == ACTIVEOBJECT_TYPE_PLAYER) { - getServer(L)->SendPlayerHPOrDie(((PlayerSAO*)co)->getPeerID(), - co->getHP() == 0); + getServer(L)->SendPlayerHPOrDie((PlayerSAO *)co); } // If the puncher is a player, and its HP changed if (dst_origin_hp != puncher->getHP() && puncher->getType() == ACTIVEOBJECT_TYPE_PLAYER) { - getServer(L)->SendPlayerHPOrDie(((PlayerSAO*)puncher)->getPeerID(), - puncher->getHP() == 0); + getServer(L)->SendPlayerHPOrDie((PlayerSAO *)puncher); } return 0; } @@ -243,8 +249,8 @@ int ObjectRef::l_right_click(lua_State *L) ObjectRef *ref2 = checkobject(L, 2); ServerActiveObject *co = getobject(ref); ServerActiveObject *co2 = getobject(ref2); - if(co == NULL) return 0; - if(co2 == NULL) return 0; + if (co == NULL) return 0; + if (co2 == NULL) return 0; // Do it co->rightClick(co2); return 0; @@ -259,15 +265,15 @@ int ObjectRef::l_set_hp(lua_State *L) ObjectRef *ref = checkobject(L, 1); luaL_checknumber(L, 2); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; int hp = lua_tonumber(L, 2); /*infostream<<"ObjectRef::l_set_hp(): id="<getId() <<" hp="<setHP(hp); - if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER) { - getServer(L)->SendPlayerHPOrDie(((PlayerSAO*)co)->getPeerID(), co->getHP() == 0); - } + if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER) + getServer(L)->SendPlayerHPOrDie((PlayerSAO *)co); + // Return return 0; } @@ -280,7 +286,7 @@ int ObjectRef::l_get_hp(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL){ + if (co == NULL) { // Default hp is 1 lua_pushnumber(L, 1); return 1; @@ -299,10 +305,10 @@ int ObjectRef::l_get_inventory(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it InventoryLocation loc = co->getInventoryLocation(); - if(getServer(L)->getInventory(loc) != NULL) + if (getServer(L)->getInventory(loc) != NULL) InvRef::create(L, loc); else lua_pushnil(L); // An object may have no inventory (nil) @@ -315,7 +321,7 @@ int ObjectRef::l_get_wield_list(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it lua_pushstring(L, co->getWieldList().c_str()); return 1; @@ -327,7 +333,7 @@ int ObjectRef::l_get_wield_index(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it lua_pushinteger(L, co->getWieldIndex() + 1); return 1; @@ -339,7 +345,7 @@ int ObjectRef::l_get_wielded_item(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL){ + if (co == NULL) { // Empty ItemStack LuaItemStack::create(L, ItemStack()); return 1; @@ -355,7 +361,7 @@ int ObjectRef::l_set_wielded_item(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it ItemStack item = read_item(L, 2, getServer(L)); bool success = co->setWieldedItem(item); @@ -372,7 +378,7 @@ int ObjectRef::l_set_armor_groups(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it ItemGroupList groups; read_groups(L, 2, groups); @@ -398,9 +404,10 @@ int ObjectRef::l_get_armor_groups(lua_State *L) // physics_override_gravity, sneak, sneak_glitch) int ObjectRef::l_set_physics_override(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); PlayerSAO *co = (PlayerSAO *) getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it if (lua_istable(L, 2)) { co->m_physics_override_speed = getfloatfield_default(L, 2, "speed", co->m_physics_override_speed); @@ -411,15 +418,15 @@ int ObjectRef::l_set_physics_override(lua_State *L) co->m_physics_override_sent = false; } else { // old, non-table format - if(!lua_isnil(L, 2)){ + if (!lua_isnil(L, 2)) { co->m_physics_override_speed = lua_tonumber(L, 2); co->m_physics_override_sent = false; } - if(!lua_isnil(L, 3)){ + if (!lua_isnil(L, 3)) { co->m_physics_override_jump = lua_tonumber(L, 3); co->m_physics_override_sent = false; } - if(!lua_isnil(L, 4)){ + if (!lua_isnil(L, 4)) { co->m_physics_override_gravity = lua_tonumber(L, 4); co->m_physics_override_sent = false; } @@ -430,6 +437,7 @@ int ObjectRef::l_set_physics_override(lua_State *L) // get_physics_override(self) int ObjectRef::l_get_physics_override(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); PlayerSAO *co = (PlayerSAO *)getobject(ref); if (co == NULL) @@ -449,24 +457,27 @@ int ObjectRef::l_get_physics_override(lua_State *L) return 1; } -// set_animation(self, frame_range, frame_speed, frame_blend) +// set_animation(self, frame_range, frame_speed, frame_blend, frame_loop) int ObjectRef::l_set_animation(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it v2f frames = v2f(1, 1); - if(!lua_isnil(L, 2)) + if (!lua_isnil(L, 2)) frames = read_v2f(L, 2); float frame_speed = 15; - if(!lua_isnil(L, 3)) + if (!lua_isnil(L, 3)) frame_speed = lua_tonumber(L, 3); float frame_blend = 0; - if(!lua_isnil(L, 4)) + if (!lua_isnil(L, 4)) frame_blend = lua_tonumber(L, 4); - co->setAnimation(frames, frame_speed, frame_blend); + bool frame_loop = true; + if (lua_isboolean(L, 5)) + frame_loop = lua_toboolean(L, 5); + co->setAnimation(frames, frame_speed, frame_blend, frame_loop); return 0; } @@ -482,18 +493,20 @@ int ObjectRef::l_get_animation(lua_State *L) v2f frames = v2f(1,1); float frame_speed = 15; float frame_blend = 0; - co->getAnimation(&frames, &frame_speed, &frame_blend); + bool frame_loop = true; + co->getAnimation(&frames, &frame_speed, &frame_blend, &frame_loop); push_v2f(L, frames); lua_pushnumber(L, frame_speed); lua_pushnumber(L, frame_blend); - return 3; + lua_pushboolean(L, frame_loop); + return 4; } // set_local_animation(self, {stand/idle}, {walk}, {dig}, {walk+dig}, frame_speed) int ObjectRef::l_set_local_animation(lua_State *L) { - //NO_MAP_LOCK_REQUIRED; + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -501,11 +514,11 @@ int ObjectRef::l_set_local_animation(lua_State *L) // Do it v2s32 frames[4]; for (int i=0;i<4;i++) { - if(!lua_isnil(L, 2+1)) + if (!lua_isnil(L, 2+1)) frames[i] = read_v2s32(L, 2+i); } float frame_speed = 30; - if(!lua_isnil(L, 6)) + if (!lua_isnil(L, 6)) frame_speed = lua_tonumber(L, 6); if (!getServer(L)->setLocalPlayerAnimations(player, frames, frame_speed)) @@ -518,7 +531,7 @@ int ObjectRef::l_set_local_animation(lua_State *L) // get_local_animation(self) int ObjectRef::l_get_local_animation(lua_State *L) { - //NO_MAP_LOCK_REQUIRED + NO_MAP_LOCK_REQUIRED ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -539,7 +552,7 @@ int ObjectRef::l_get_local_animation(lua_State *L) // set_eye_offset(self, v3f first pv, v3f third pv) int ObjectRef::l_set_eye_offset(lua_State *L) { - //NO_MAP_LOCK_REQUIRED; + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -548,9 +561,9 @@ int ObjectRef::l_set_eye_offset(lua_State *L) v3f offset_first = v3f(0, 0, 0); v3f offset_third = v3f(0, 0, 0); - if(!lua_isnil(L, 2)) + if (!lua_isnil(L, 2)) offset_first = read_v3f(L, 2); - if(!lua_isnil(L, 3)) + if (!lua_isnil(L, 3)) offset_third = read_v3f(L, 3); // Prevent abuse of offset values (keep player always visible) @@ -569,7 +582,7 @@ int ObjectRef::l_set_eye_offset(lua_State *L) // get_eye_offset(self) int ObjectRef::l_get_eye_offset(lua_State *L) { - //NO_MAP_LOCK_REQUIRED; + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -586,16 +599,16 @@ int ObjectRef::l_set_bone_position(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it std::string bone = ""; - if(!lua_isnil(L, 2)) + if (!lua_isnil(L, 2)) bone = lua_tostring(L, 2); v3f position = v3f(0, 0, 0); - if(!lua_isnil(L, 3)) + if (!lua_isnil(L, 3)) position = read_v3f(L, 3); v3f rotation = v3f(0, 0, 0); - if(!lua_isnil(L, 4)) + if (!lua_isnil(L, 4)) rotation = read_v3f(L, 4); co->setBonePosition(bone, position, rotation); return 0; @@ -611,7 +624,7 @@ int ObjectRef::l_get_bone_position(lua_State *L) return 0; // Do it std::string bone = ""; - if(!lua_isnil(L, 2)) + if (!lua_isnil(L, 2)) bone = lua_tostring(L, 2); v3f position = v3f(0, 0, 0); @@ -626,31 +639,44 @@ int ObjectRef::l_get_bone_position(lua_State *L) // set_attach(self, parent, bone, position, rotation) int ObjectRef::l_set_attach(lua_State *L) { - NO_MAP_LOCK_REQUIRED; + GET_ENV_PTR; + ObjectRef *ref = checkobject(L, 1); ObjectRef *parent_ref = checkobject(L, 2); ServerActiveObject *co = getobject(ref); ServerActiveObject *parent = getobject(parent_ref); - if(co == NULL) return 0; - if(parent == NULL) return 0; + if (co == NULL) + return 0; + if (parent == NULL) + return 0; // Do it + int parent_id = 0; std::string bone = ""; - if(!lua_isnil(L, 3)) - bone = lua_tostring(L, 3); v3f position = v3f(0, 0, 0); - if(!lua_isnil(L, 4)) - position = read_v3f(L, 4); v3f rotation = v3f(0, 0, 0); - if(!lua_isnil(L, 5)) + co->getAttachment(&parent_id, &bone, &position, &rotation); + if (parent_id) { + ServerActiveObject *old_parent = env->getActiveObject(parent_id); + old_parent->removeAttachmentChild(co->getId()); + } + + bone = ""; + if (!lua_isnil(L, 3)) + bone = lua_tostring(L, 3); + position = v3f(0, 0, 0); + if (!lua_isnil(L, 4)) + position = read_v3f(L, 4); + rotation = v3f(0, 0, 0); + if (!lua_isnil(L, 5)) rotation = read_v3f(L, 5); co->setAttachment(parent->getId(), bone, position, rotation); + parent->addAttachmentChild(co->getId()); return 0; } // get_attach(self) int ObjectRef::l_get_attach(lua_State *L) { - NO_MAP_LOCK_REQUIRED; GET_ENV_PTR; ObjectRef *ref = checkobject(L, 1); @@ -678,12 +704,26 @@ int ObjectRef::l_get_attach(lua_State *L) // set_detach(self) int ObjectRef::l_set_detach(lua_State *L) { - NO_MAP_LOCK_REQUIRED; + GET_ENV_PTR; + ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) + return 0; + + int parent_id = 0; + std::string bone = ""; + v3f position; + v3f rotation; + co->getAttachment(&parent_id, &bone, &position, &rotation); + ServerActiveObject *parent = NULL; + if (parent_id) + parent = env->getActiveObject(parent_id); + // Do it co->setAttachment(0, "", v3f(0,0,0), v3f(0,0,0)); + if (parent != NULL) + parent->removeAttachmentChild(co->getId()); return 0; } @@ -693,9 +733,9 @@ int ObjectRef::l_set_properties(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; ObjectProperties *prop = co->accessObjectProperties(); - if(!prop) + if (!prop) return 0; read_object_properties(L, 2, prop); co->notifyObjectPropertiesModified(); @@ -735,7 +775,7 @@ int ObjectRef::l_setvelocity(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; v3f pos = checkFloatPos(L, 2); // Do it co->setVelocity(pos); @@ -748,7 +788,7 @@ int ObjectRef::l_getvelocity(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it v3f v = co->getVelocity(); pushFloatPos(L, v); @@ -761,7 +801,7 @@ int ObjectRef::l_setacceleration(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // pos v3f pos = checkFloatPos(L, 2); // Do it @@ -775,7 +815,7 @@ int ObjectRef::l_getacceleration(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it v3f v = co->getAcceleration(); pushFloatPos(L, v); @@ -788,7 +828,7 @@ int ObjectRef::l_setyaw(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; float yaw = luaL_checknumber(L, 2) * core::RADTODEG; // Do it co->setYaw(yaw); @@ -801,7 +841,7 @@ int ObjectRef::l_getyaw(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it float yaw = co->getYaw() * core::DEGTORAD; lua_pushnumber(L, yaw); @@ -814,7 +854,7 @@ int ObjectRef::l_settexturemod(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it std::string mod = luaL_checkstring(L, 2); co->setTextureMod(mod); @@ -828,19 +868,19 @@ int ObjectRef::l_setsprite(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it v2s16 p(0,0); - if(!lua_isnil(L, 2)) + if (!lua_isnil(L, 2)) p = read_v2s16(L, 2); int num_frames = 1; - if(!lua_isnil(L, 3)) + if (!lua_isnil(L, 3)) num_frames = lua_tonumber(L, 3); float framelength = 0.2; - if(!lua_isnil(L, 4)) + if (!lua_isnil(L, 4)) framelength = lua_tonumber(L, 4); bool select_horiz_by_yawpitch = false; - if(!lua_isnil(L, 5)) + if (!lua_isnil(L, 5)) select_horiz_by_yawpitch = lua_toboolean(L, 5); co->setSprite(p, num_frames, framelength, select_horiz_by_yawpitch); return 0; @@ -854,7 +894,7 @@ int ObjectRef::l_get_entity_name(lua_State *L) ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); log_deprecated(L,"Deprecated call to \"get_entity_name"); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it std::string name = co->getName(); lua_pushstring(L, name.c_str()); @@ -867,7 +907,7 @@ int ObjectRef::l_get_luaentity(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); LuaEntitySAO *co = getluaobject(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it luaentity_get(L, co->getId()); return 1; @@ -891,7 +931,7 @@ int ObjectRef::l_get_player_name(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); - if(player == NULL){ + if (player == NULL) { lua_pushlstring(L, "", 0); return 1; } @@ -900,13 +940,28 @@ int ObjectRef::l_get_player_name(lua_State *L) return 1; } +// get_player_velocity(self) +int ObjectRef::l_get_player_velocity(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + ObjectRef *ref = checkobject(L, 1); + Player *player = getplayer(ref); + if (player == NULL) { + lua_pushnil(L); + return 1; + } + // Do it + push_v3f(L, player->getSpeed() / BS); + return 1; +} + // get_look_dir(self) int ObjectRef::l_get_look_dir(lua_State *L) { NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); - if(player == NULL) return 0; + if (player == NULL) return 0; // Do it float pitch = player->getRadPitch(); float yaw = player->getRadYaw(); @@ -921,7 +976,7 @@ int ObjectRef::l_get_look_pitch(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); - if(player == NULL) return 0; + if (player == NULL) return 0; // Do it lua_pushnumber(L, player->getRadPitch()); return 1; @@ -933,7 +988,7 @@ int ObjectRef::l_get_look_yaw(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); - if(player == NULL) return 0; + if (player == NULL) return 0; // Do it lua_pushnumber(L, player->getRadYaw()); return 1; @@ -945,7 +1000,7 @@ int ObjectRef::l_set_look_pitch(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); PlayerSAO* co = getplayersao(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; float pitch = luaL_checknumber(L, 2) * core::RADTODEG; // Do it co->setPitch(pitch); @@ -958,7 +1013,7 @@ int ObjectRef::l_set_look_yaw(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); PlayerSAO* co = getplayersao(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; float yaw = luaL_checknumber(L, 2) * core::RADTODEG; // Do it co->setYaw(yaw); @@ -971,7 +1026,7 @@ int ObjectRef::l_set_breath(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); PlayerSAO* co = getplayersao(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; u16 breath = luaL_checknumber(L, 2); // Do it co->setBreath(breath); @@ -989,7 +1044,7 @@ int ObjectRef::l_get_breath(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); PlayerSAO* co = getplayersao(ref); - if(co == NULL) return 0; + if (co == NULL) return 0; // Do it u16 breath = co->getBreath(); lua_pushinteger (L, breath); @@ -1002,7 +1057,7 @@ int ObjectRef::l_set_inventory_formspec(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); - if(player == NULL) return 0; + if (player == NULL) return 0; std::string formspec = luaL_checkstring(L, 2); player->inventory_formspec = formspec; @@ -1017,7 +1072,7 @@ int ObjectRef::l_get_inventory_formspec(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); - if(player == NULL) return 0; + if (player == NULL) return 0; std::string formspec = player->inventory_formspec; lua_pushlstring(L, formspec.c_str(), formspec.size()); @@ -1030,7 +1085,7 @@ int ObjectRef::l_get_player_control(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); - if(player == NULL){ + if (player == NULL) { lua_pushlstring(L, "", 0); return 1; } @@ -1064,7 +1119,7 @@ int ObjectRef::l_get_player_control_bits(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); - if(player == NULL){ + if (player == NULL) { lua_pushlstring(L, "", 0); return 1; } @@ -1076,6 +1131,7 @@ int ObjectRef::l_get_player_control_bits(lua_State *L) // hud_add(self, form) int ObjectRef::l_hud_add(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -1126,7 +1182,7 @@ int ObjectRef::l_hud_add(lua_State *L) } u32 id = getServer(L)->hudAdd(player, elem); - if (id == (u32)-1) { + if (id == U32_MAX) { delete elem; return 0; } @@ -1138,6 +1194,7 @@ int ObjectRef::l_hud_add(lua_State *L) // hud_remove(self, id) int ObjectRef::l_hud_remove(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -1157,6 +1214,7 @@ int ObjectRef::l_hud_remove(lua_State *L) // hud_change(self, id, stat, data) int ObjectRef::l_hud_change(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -1233,6 +1291,7 @@ int ObjectRef::l_hud_change(lua_State *L) // hud_get(self, id) int ObjectRef::l_hud_get(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -1283,6 +1342,7 @@ int ObjectRef::l_hud_get(lua_State *L) // hud_set_flags(self, flags) int ObjectRef::l_hud_set_flags(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -1308,6 +1368,7 @@ int ObjectRef::l_hud_set_flags(lua_State *L) int ObjectRef::l_hud_get_flags(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -1324,6 +1385,8 @@ int ObjectRef::l_hud_get_flags(lua_State *L) lua_setfield(L, -2, "wielditem"); lua_pushboolean(L, player->hud_flags & HUD_FLAG_BREATHBAR_VISIBLE); lua_setfield(L, -2, "breathbar"); + lua_pushboolean(L, player->hud_flags & HUD_FLAG_MINIMAP_VISIBLE); + lua_setfield(L, -2, "minimap"); return 1; } @@ -1331,6 +1394,7 @@ int ObjectRef::l_hud_get_flags(lua_State *L) // hud_set_hotbar_itemcount(self, hotbar_itemcount) int ObjectRef::l_hud_set_hotbar_itemcount(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -1348,6 +1412,7 @@ int ObjectRef::l_hud_set_hotbar_itemcount(lua_State *L) // hud_get_hotbar_itemcount(self) int ObjectRef::l_hud_get_hotbar_itemcount(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -1362,6 +1427,7 @@ int ObjectRef::l_hud_get_hotbar_itemcount(lua_State *L) // hud_set_hotbar_image(self, name) int ObjectRef::l_hud_set_hotbar_image(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -1376,6 +1442,7 @@ int ObjectRef::l_hud_set_hotbar_image(lua_State *L) // hud_get_hotbar_image(self) int ObjectRef::l_hud_get_hotbar_image(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -1389,6 +1456,7 @@ int ObjectRef::l_hud_get_hotbar_image(lua_State *L) // hud_set_hotbar_selected_image(self, name) int ObjectRef::l_hud_set_hotbar_selected_image(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -1403,6 +1471,7 @@ int ObjectRef::l_hud_set_hotbar_selected_image(lua_State *L) // hud_get_hotbar_selected_image(self) int ObjectRef::l_hud_get_hotbar_selected_image(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -1416,6 +1485,7 @@ int ObjectRef::l_hud_get_hotbar_selected_image(lua_State *L) // set_sky(self, bgcolor, type, list) int ObjectRef::l_set_sky(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -1454,6 +1524,7 @@ int ObjectRef::l_set_sky(lua_State *L) // get_sky(self) int ObjectRef::l_get_sky(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -1481,6 +1552,7 @@ int ObjectRef::l_get_sky(lua_State *L) // override_day_night_ratio(self, brightness=0...1) int ObjectRef::l_override_day_night_ratio(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -1488,7 +1560,7 @@ int ObjectRef::l_override_day_night_ratio(lua_State *L) bool do_override = false; float ratio = 0.0f; - if (!lua_isnil(L, 2)){ + if (!lua_isnil(L, 2)) { do_override = true; ratio = luaL_checknumber(L, 2); } @@ -1503,6 +1575,7 @@ int ObjectRef::l_override_day_night_ratio(lua_State *L) // get_day_night_ratio(self) int ObjectRef::l_get_day_night_ratio(lua_State *L) { + NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); Player *player = getplayer(ref); if (player == NULL) @@ -1567,7 +1640,7 @@ ObjectRef::ObjectRef(ServerActiveObject *object): ObjectRef::~ObjectRef() { - /*if(m_object) + /*if (m_object) infostream<<"ObjectRef destructing for id=" <getId()< 1) // deprecated { - log_deprecated(L,"Deprecated add_particle call with individual parameters instead of definition"); + log_deprecated(L, "Deprecated add_particle call with individual parameters instead of definition"); pos = check_v3f(L, 1); vel = check_v3f(L, 2); acc = check_v3f(L, 3); @@ -57,44 +62,44 @@ int ModApiParticles::l_add_particle(lua_State *L) } else if (lua_istable(L, 1)) { - int table = lua_gettop(L); - lua_pushnil(L); - while (lua_next(L, table) != 0) - { - const char *key = lua_tostring(L, -2); - if(strcmp(key,"pos")==0){ - pos=check_v3f(L, -1); - }else if(strcmp(key,"vel")==0){ - vel=check_v3f(L, -1); - }else if(strcmp(key,"acc")==0){ - acc=check_v3f(L, -1); - }else if(strcmp(key,"expirationtime")==0){ - expirationtime=luaL_checknumber(L, -1); - }else if(strcmp(key,"size")==0){ - size=luaL_checknumber(L, -1); - }else if(strcmp(key,"collisiondetection")==0){ - collisiondetection=lua_toboolean(L, -1); - }else if(strcmp(key,"vertical")==0){ - vertical=lua_toboolean(L, -1); - }else if(strcmp(key,"texture")==0){ - texture=luaL_checkstring(L, -1); - }else if(strcmp(key,"playername")==0){ - playername=luaL_checkstring(L, -1); - } - lua_pop(L, 1); + lua_getfield(L, 1, "pos"); + pos = lua_istable(L, -1) ? check_v3f(L, -1) : v3f(); + lua_pop(L, 1); + + lua_getfield(L, 1, "vel"); + if (lua_istable(L, -1)) { + vel = check_v3f(L, -1); + log_deprecated(L, "The use of vel is deprecated. " + "Use velocity instead"); } + lua_pop(L, 1); + + lua_getfield(L, 1, "velocity"); + vel = lua_istable(L, -1) ? check_v3f(L, -1) : vel; + lua_pop(L, 1); + + lua_getfield(L, 1, "acc"); + if (lua_istable(L, -1)) { + acc = check_v3f(L, -1); + log_deprecated(L, "The use of acc is deprecated. " + "Use acceleration instead"); + } + lua_pop(L, 1); + + lua_getfield(L, 1, "acceleration"); + acc = lua_istable(L, -1) ? check_v3f(L, -1) : acc; + lua_pop(L, 1); + + expirationtime = getfloatfield_default(L, 1, "expirationtime", 1); + size = getfloatfield_default(L, 1, "size", 1); + collisiondetection = getboolfield_default(L, 1, + "collisiondetection", collisiondetection); + vertical = getboolfield_default(L, 1, "vertical", vertical); + texture = getstringfield_default(L, 1, "texture", ""); + playername = getstringfield_default(L, 1, "playername", ""); } - if (strcmp(playername, "")==0) // spawn for all players - { - getServer(L)->spawnParticleAll(pos, vel, acc, + getServer(L)->spawnParticle(playername, pos, vel, acc, expirationtime, size, collisiondetection, vertical, texture); - } - else - { - getServer(L)->spawnParticle(playername, - pos, vel, acc, expirationtime, - size, collisiondetection, vertical, texture); - } return 1; } @@ -116,6 +121,8 @@ int ModApiParticles::l_add_particle(lua_State *L) // texture = e.g."default_wood.png" int ModApiParticles::l_add_particlespawner(lua_State *L) { + MAP_LOCK_REQUIRED; + // Get parameters u16 amount = 1; v3f minpos, maxpos, minvel, maxvel, minacc, maxacc; @@ -125,7 +132,7 @@ int ModApiParticles::l_add_particlespawner(lua_State *L) bool collisiondetection, vertical; collisiondetection= vertical= false; std::string texture = ""; - const char *playername = ""; + std::string playername = ""; if (lua_gettop(L) > 1) //deprecated { @@ -149,74 +156,55 @@ int ModApiParticles::l_add_particlespawner(lua_State *L) } else if (lua_istable(L, 1)) { - int table = lua_gettop(L); - lua_pushnil(L); - while (lua_next(L, table) != 0) - { - const char *key = lua_tostring(L, -2); - if(strcmp(key,"amount")==0){ - amount=luaL_checknumber(L, -1); - }else if(strcmp(key,"time")==0){ - time=luaL_checknumber(L, -1); - }else if(strcmp(key,"minpos")==0){ - minpos=check_v3f(L, -1); - }else if(strcmp(key,"maxpos")==0){ - maxpos=check_v3f(L, -1); - }else if(strcmp(key,"minvel")==0){ - minvel=check_v3f(L, -1); - }else if(strcmp(key,"maxvel")==0){ - maxvel=check_v3f(L, -1); - }else if(strcmp(key,"minacc")==0){ - minacc=check_v3f(L, -1); - }else if(strcmp(key,"maxacc")==0){ - maxacc=check_v3f(L, -1); - }else if(strcmp(key,"minexptime")==0){ - minexptime=luaL_checknumber(L, -1); - }else if(strcmp(key,"maxexptime")==0){ - maxexptime=luaL_checknumber(L, -1); - }else if(strcmp(key,"minsize")==0){ - minsize=luaL_checknumber(L, -1); - }else if(strcmp(key,"maxsize")==0){ - maxsize=luaL_checknumber(L, -1); - }else if(strcmp(key,"collisiondetection")==0){ - collisiondetection=lua_toboolean(L, -1); - }else if(strcmp(key,"vertical")==0){ - vertical=lua_toboolean(L, -1); - }else if(strcmp(key,"texture")==0){ - texture=luaL_checkstring(L, -1); - }else if(strcmp(key,"playername")==0){ - playername=luaL_checkstring(L, -1); - } - lua_pop(L, 1); - } - } - if (strcmp(playername, "")==0) //spawn for all players - { - u32 id = getServer(L)->addParticleSpawnerAll( amount, time, - minpos, maxpos, - minvel, maxvel, - minacc, maxacc, - minexptime, maxexptime, - minsize, maxsize, - collisiondetection, - vertical, - texture); - lua_pushnumber(L, id); - } - else - { - u32 id = getServer(L)->addParticleSpawner(playername, - amount, time, - minpos, maxpos, - minvel, maxvel, - minacc, maxacc, - minexptime, maxexptime, - minsize, maxsize, - collisiondetection, - vertical, - texture); - lua_pushnumber(L, id); + amount = getintfield_default(L, 1, "amount", amount); + time = getfloatfield_default(L, 1, "time", time); + + lua_getfield(L, 1, "minpos"); + minpos = lua_istable(L, -1) ? check_v3f(L, -1) : minpos; + lua_pop(L, 1); + + lua_getfield(L, 1, "maxpos"); + maxpos = lua_istable(L, -1) ? check_v3f(L, -1) : maxpos; + lua_pop(L, 1); + + lua_getfield(L, 1, "minvel"); + minvel = lua_istable(L, -1) ? check_v3f(L, -1) : minvel; + lua_pop(L, 1); + + lua_getfield(L, 1, "maxvel"); + maxvel = lua_istable(L, -1) ? check_v3f(L, -1) : maxvel; + lua_pop(L, 1); + + lua_getfield(L, 1, "minacc"); + minacc = lua_istable(L, -1) ? check_v3f(L, -1) : minacc; + lua_pop(L, 1); + + lua_getfield(L, 1, "maxacc"); + maxacc = lua_istable(L, -1) ? check_v3f(L, -1) : maxacc; + lua_pop(L, 1); + + minexptime = getfloatfield_default(L, 1, "minexptime", minexptime); + maxexptime = getfloatfield_default(L, 1, "maxexptime", maxexptime); + minsize = getfloatfield_default(L, 1, "minsize", minsize); + maxsize = getfloatfield_default(L, 1, "maxsize", maxsize); + collisiondetection = getboolfield_default(L, 1, + "collisiondetection", collisiondetection); + vertical = getboolfield_default(L, 1, "vertical", vertical); + texture = getstringfield_default(L, 1, "texture", ""); + playername = getstringfield_default(L, 1, "playername", ""); } + + u32 id = getServer(L)->addParticleSpawner(amount, time, + minpos, maxpos, + minvel, maxvel, + minacc, maxacc, + minexptime, maxexptime, + minsize, maxsize, + collisiondetection, + vertical, + texture, playername); + lua_pushnumber(L, id); + return 1; } @@ -224,18 +212,16 @@ int ModApiParticles::l_add_particlespawner(lua_State *L) // player (string) is optional int ModApiParticles::l_delete_particlespawner(lua_State *L) { + MAP_LOCK_REQUIRED; + // Get parameters u32 id = luaL_checknumber(L, 1); + std::string playername = ""; + if (lua_gettop(L) == 2) { + playername = luaL_checkstring(L, 2); + } - if (lua_gettop(L) == 2) // only delete for one player - { - const char *playername = luaL_checkstring(L, 2); - getServer(L)->deleteParticleSpawner(playername, id); - } - else // delete for all players - { - getServer(L)->deleteParticleSpawnerAll(id); - } + getServer(L)->deleteParticleSpawner(playername, id); return 1; } diff --git a/src/script/lua_api/l_rollback.cpp b/src/script/lua_api/l_rollback.cpp index 8a967e3c..748b7810 100644 --- a/src/script/lua_api/l_rollback.cpp +++ b/src/script/lua_api/l_rollback.cpp @@ -38,6 +38,8 @@ void push_RollbackNode(lua_State *L, RollbackNode &node) // rollback_get_node_actions(pos, range, seconds, limit) -> {{actor, pos, time, oldnode, newnode}, ...} int ModApiRollback::l_rollback_get_node_actions(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + v3s16 pos = read_v3s16(L, 1); int range = luaL_checknumber(L, 2); time_t seconds = (time_t) luaL_checknumber(L, 3); @@ -79,6 +81,8 @@ int ModApiRollback::l_rollback_get_node_actions(lua_State *L) // rollback_revert_actions_by(actor, seconds) -> bool, log messages int ModApiRollback::l_rollback_revert_actions_by(lua_State *L) { + MAP_LOCK_REQUIRED; + std::string actor = luaL_checkstring(L, 1); int seconds = luaL_checknumber(L, 2); Server *server = getServer(L); diff --git a/src/script/lua_api/l_server.cpp b/src/script/lua_api/l_server.cpp index 10ad78ad..ba00333b 100644 --- a/src/script/lua_api/l_server.cpp +++ b/src/script/lua_api/l_server.cpp @@ -30,7 +30,10 @@ with this program; if not, write to the Free Software Foundation, Inc., // request_shutdown() int ModApiServer::l_request_shutdown(lua_State *L) { - getServer(L)->requestShutdown(); + NO_MAP_LOCK_REQUIRED; + const char *msg = lua_tolstring(L, 1, NULL); + bool reconnect = lua_toboolean(L, 2); + getServer(L)->requestShutdown(msg ? msg : "", reconnect); return 0; } @@ -108,7 +111,7 @@ int ModApiServer::l_get_player_ip(lua_State *L) } catch(con::PeerNotFoundException) // unlikely { - dstream << __FUNCTION_NAME << ": peer was not found" << std::endl; + dstream << FUNCTION_NAME << ": peer was not found" << std::endl; lua_pushnil(L); // error return 1; } @@ -134,7 +137,7 @@ int ModApiServer::l_get_player_information(lua_State *L) } catch(con::PeerNotFoundException) // unlikely { - dstream << __FUNCTION_NAME << ": peer was not found" << std::endl; + dstream << FUNCTION_NAME << ": peer was not found" << std::endl; lua_pushnil(L); // error return 1; } @@ -148,7 +151,7 @@ int ModApiServer::l_get_player_information(lua_State *L) #define ERET(code) \ if (!(code)) { \ - dstream << __FUNCTION_NAME << ": peer was not found" << std::endl; \ + dstream << FUNCTION_NAME << ": peer was not found" << std::endl; \ lua_pushnil(L); /* error */ \ return 1; \ } @@ -279,7 +282,7 @@ int ModApiServer::l_ban_player(lua_State *L) } catch(con::PeerNotFoundException) // unlikely { - dstream << __FUNCTION_NAME << ": peer was not found" << std::endl; + dstream << FUNCTION_NAME << ": peer was not found" << std::endl; lua_pushboolean(L, false); // error return 1; } @@ -307,7 +310,7 @@ int ModApiServer::l_kick_player(lua_State *L) lua_pushboolean(L, false); // No such player return 1; } - getServer(L)->DenyAccess_Legacy(player->peer_id, narrow_to_wide(message)); + getServer(L)->DenyAccess_Legacy(player->peer_id, utf8_to_wide(message)); lua_pushboolean(L, true); return 1; } @@ -343,7 +346,7 @@ int ModApiServer::l_show_formspec(lua_State *L) int ModApiServer::l_get_current_modname(lua_State *L) { NO_MAP_LOCK_REQUIRED; - lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); return 1; } @@ -436,6 +439,31 @@ int ModApiServer::l_notify_authentication_modified(lua_State *L) return 0; } +// get_last_run_mod() +int ModApiServer::l_get_last_run_mod(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); + const char *current_mod = lua_tostring(L, -1); + if (current_mod == NULL || current_mod[0] == '\0') { + lua_pop(L, 1); + lua_pushstring(L, getScriptApiBase(L)->getOrigin().c_str()); + } + return 1; +} + +// set_last_run_mod(modname) +int ModApiServer::l_set_last_run_mod(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; +#ifdef SCRIPTAPI_DEBUG + const char *mod = lua_tostring(L, 1); + getScriptApiBase(L)->setOriginDirect(mod); + //printf(">>>> last mod set from Lua: %s\n", mod); +#endif + return 0; +} + #ifndef NDEBUG // cause_error(type_of_error) int ModApiServer::l_cause_error(lua_State *L) @@ -493,6 +521,8 @@ void ModApiServer::Initialize(lua_State *L, int top) API_FCT(unban_player_or_ip); API_FCT(notify_authentication_modified); + API_FCT(get_last_run_mod); + API_FCT(set_last_run_mod); #ifndef NDEBUG API_FCT(cause_error); #endif diff --git a/src/script/lua_api/l_server.h b/src/script/lua_api/l_server.h index 9ebc6332..b9fddd91 100644 --- a/src/script/lua_api/l_server.h +++ b/src/script/lua_api/l_server.h @@ -24,7 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., class ModApiServer : public ModApiBase { private: - // request_shutdown() + // request_shutdown([message], [reconnect]) static int l_request_shutdown(lua_State *L); // get_server_status() @@ -88,6 +88,12 @@ private: // notify_authentication_modified(name) static int l_notify_authentication_modified(lua_State *L); + // get_last_run_mod() + static int l_get_last_run_mod(lua_State *L); + + // set_last_run_mod(modname) + static int l_set_last_run_mod(lua_State *L); + #ifndef NDEBUG // cause_error(type_of_error) static int l_cause_error(lua_State *L); diff --git a/src/script/lua_api/l_util.cpp b/src/script/lua_api/l_util.cpp index 27343081..0f3bade1 100644 --- a/src/script/lua_api/l_util.cpp +++ b/src/script/lua_api/l_util.cpp @@ -25,7 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "serialization.h" #include "json/json.h" #include "cpp_api/s_security.h" -#include "debug.h" +#include "areastore.h" #include "porting.h" #include "log.h" #include "tool.h" @@ -34,66 +34,45 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "util/auth.h" #include -// debug(...) -// Writes a line to dstream -int ModApiUtil::l_debug(lua_State *L) -{ - NO_MAP_LOCK_REQUIRED; - // Handle multiple parameters to behave like standard lua print() - int n = lua_gettop(L); - lua_getglobal(L, "tostring"); - for (int i = 1; i <= n; i++) { - /* - Call tostring(i-th argument). - This is what print() does, and it behaves a bit - differently from directly calling lua_tostring. - */ - lua_pushvalue(L, -1); /* function to be called */ - lua_pushvalue(L, i); /* value to print */ - lua_call(L, 1, 1); - size_t len; - const char *s = lua_tolstring(L, -1, &len); - if (i > 1) - dstream << "\t"; - if (s) - dstream << std::string(s, len); - lua_pop(L, 1); - } - dstream << std::endl; - return 0; -} - // log([level,] text) // Writes a line to the logger. // The one-argument version logs to infostream. -// The two-argument version accept a log level: error, action, info, or verbose. +// The two-argument version accepts a log level. +// Either the special case "deprecated" for deprecation notices, or any specified in +// Logger::stringToLevel(name). int ModApiUtil::l_log(lua_State *L) { NO_MAP_LOCK_REQUIRED; std::string text; - LogMessageLevel level = LMT_INFO; + LogLevel level = LL_NONE; if (lua_isnone(L, 2)) { - text = lua_tostring(L, 1); - } - else { - std::string levelname = luaL_checkstring(L, 1); + text = luaL_checkstring(L, 1); + } else { + std::string name = luaL_checkstring(L, 1); text = luaL_checkstring(L, 2); - if(levelname == "error") - level = LMT_ERROR; - else if(levelname == "action") - level = LMT_ACTION; - else if(levelname == "verbose") - level = LMT_VERBOSE; - else if (levelname == "deprecated") { - log_deprecated(L,text); + if (name == "deprecated") { + log_deprecated(L, text); return 0; } - + level = Logger::stringToLevel(name); + if (level == LL_MAX) { + warningstream << "Tried to log at unknown level '" << name + << "'. Defaulting to \"none\"." << std::endl; + level = LL_NONE; + } } - log_printline(level, text); + g_logger.log(level, text); return 0; } +// get_us_time() +int ModApiUtil::l_get_us_time(lua_State *L) +{ + NO_MAP_LOCK_REQUIRED; + lua_pushnumber(L, porting::getTimeUs()); + return 1; +} + #define CHECK_SECURE_SETTING(L, name) \ if (name.compare(0, 7, "secure.") == 0) {\ lua_pushliteral(L, "Attempt to set secure setting.");\ @@ -289,6 +268,8 @@ int ModApiUtil::l_is_yes(lua_State *L) int ModApiUtil::l_get_builtin_path(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + std::string path = porting::path_share + DIR_DELIM + "builtin"; lua_pushstring(L, path.c_str()); return 1; @@ -297,6 +278,8 @@ int ModApiUtil::l_get_builtin_path(lua_State *L) // compress(data, method, level) int ModApiUtil::l_compress(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + size_t size; const char *data = luaL_checklstring(L, 1, &size); @@ -316,6 +299,8 @@ int ModApiUtil::l_compress(lua_State *L) // decompress(data, method) int ModApiUtil::l_decompress(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + size_t size; const char *data = luaL_checklstring(L, 1, &size); @@ -370,7 +355,7 @@ int ModApiUtil::l_request_insecure_environment(lua_State *L) lua_getglobal(L, "_G"); return 1; } - lua_getfield(L, LUA_REGISTRYINDEX, SCRIPT_MOD_NAME_FIELD); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_CURRENT_MOD_NAME); if (!lua_isstring(L, -1)) { lua_pushnil(L); return 1; @@ -382,16 +367,17 @@ int ModApiUtil::l_request_insecure_environment(lua_State *L) lua_pushnil(L); return 1; } - lua_getfield(L, LUA_REGISTRYINDEX, "globals_backup"); + lua_rawgeti(L, LUA_REGISTRYINDEX, CUSTOM_RIDX_GLOBALS_BACKUP); return 1; } void ModApiUtil::Initialize(lua_State *L, int top) { - API_FCT(debug); API_FCT(log); + API_FCT(get_us_time); + API_FCT(setting_set); API_FCT(setting_get); API_FCT(setting_setbool); @@ -421,9 +407,10 @@ void ModApiUtil::Initialize(lua_State *L, int top) void ModApiUtil::InitializeAsync(AsyncEngine& engine) { - ASYNC_API_FCT(debug); ASYNC_API_FCT(log); + ASYNC_API_FCT(get_us_time); + //ASYNC_API_FCT(setting_set); ASYNC_API_FCT(setting_get); //ASYNC_API_FCT(setting_setbool); diff --git a/src/script/lua_api/l_util.h b/src/script/lua_api/l_util.h index 23e29d34..d8243832 100644 --- a/src/script/lua_api/l_util.h +++ b/src/script/lua_api/l_util.h @@ -35,16 +35,15 @@ private: GUIEngine instance should be in here. */ - // debug(text) - // Writes a line to dstream - static int l_debug(lua_State *L); - // log([level,] text) // Writes a line to the logger. // The one-argument version logs to infostream. // The two-argument version accept a log level: error, action, info, or verbose. static int l_log(lua_State *L); + // get us precision time + static int l_get_us_time(lua_State *L); + // setting_set(name, value) static int l_setting_set(lua_State *L); diff --git a/src/script/lua_api/l_vmanip.cpp b/src/script/lua_api/l_vmanip.cpp index 47de26b1..8afcec42 100644 --- a/src/script/lua_api/l_vmanip.cpp +++ b/src/script/lua_api/l_vmanip.cpp @@ -28,10 +28,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "server.h" #include "mapgen.h" -#define GET_ENV_PTR ServerEnvironment* env = \ - dynamic_cast(getEnv(L)); \ - if (env == NULL) return 0 - // garbage collector int LuaVoxelManip::gc_object(lua_State *L) { @@ -43,6 +39,8 @@ int LuaVoxelManip::gc_object(lua_State *L) int LuaVoxelManip::l_read_from_map(lua_State *L) { + MAP_LOCK_REQUIRED; + LuaVoxelManip *o = checkobject(L, 1); MMVManip *vm = o->vm; @@ -108,6 +106,8 @@ int LuaVoxelManip::l_set_data(lua_State *L) int LuaVoxelManip::l_write_to_map(lua_State *L) { + MAP_LOCK_REQUIRED; + LuaVoxelManip *o = checkobject(L, 1); MMVManip *vm = o->vm; @@ -119,23 +119,25 @@ int LuaVoxelManip::l_write_to_map(lua_State *L) int LuaVoxelManip::l_get_node_at(lua_State *L) { NO_MAP_LOCK_REQUIRED; - GET_ENV_PTR; + + INodeDefManager *ndef = getServer(L)->getNodeDefManager(); LuaVoxelManip *o = checkobject(L, 1); v3s16 pos = check_v3s16(L, 2); - pushnode(L, o->vm->getNodeNoExNoEmerge(pos), env->getGameDef()->ndef()); + pushnode(L, o->vm->getNodeNoExNoEmerge(pos), ndef); return 1; } int LuaVoxelManip::l_set_node_at(lua_State *L) { NO_MAP_LOCK_REQUIRED; - GET_ENV_PTR; + + INodeDefManager *ndef = getServer(L)->getNodeDefManager(); LuaVoxelManip *o = checkobject(L, 1); v3s16 pos = check_v3s16(L, 2); - MapNode n = readnode(L, 3, env->getGameDef()->ndef()); + MapNode n = readnode(L, 3, ndef); o->vm->setNodeNoEmerge(pos, n); @@ -313,14 +315,12 @@ int LuaVoxelManip::l_set_param2_data(lua_State *L) int LuaVoxelManip::l_update_map(lua_State *L) { + GET_ENV_PTR; + LuaVoxelManip *o = checkobject(L, 1); if (o->is_mapgen_vm) return 0; - Environment *env = getEnv(L); - if (!env) - return 0; - Map *map = &(env->getMap()); // TODO: Optimize this by using Mapgen::calcLighting() instead @@ -359,6 +359,8 @@ int LuaVoxelManip::l_was_modified(lua_State *L) int LuaVoxelManip::l_get_emerged_area(lua_State *L) { + NO_MAP_LOCK_REQUIRED; + LuaVoxelManip *o = checkobject(L, 1); push_v3s16(L, o->vm->m_area.MinEdge); @@ -400,11 +402,7 @@ LuaVoxelManip::~LuaVoxelManip() // Creates an LuaVoxelManip and leaves it on top of stack int LuaVoxelManip::create_object(lua_State *L) { - NO_MAP_LOCK_REQUIRED; - - Environment *env = getEnv(L); - if (!env) - return 0; + GET_ENV_PTR; Map *map = &(env->getMap()); LuaVoxelManip *o = (lua_istable(L, 1) && lua_istable(L, 2)) ? diff --git a/src/script/scripting_game.cpp b/src/script/scripting_game.cpp index a533067f..81870cfe 100644 --- a/src/script/scripting_game.cpp +++ b/src/script/scripting_game.cpp @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" #include "settings.h" #include "cpp_api/s_internal.h" +#include "lua_api/l_areastore.h" #include "lua_api/l_base.h" #include "lua_api/l_craft.h" #include "lua_api/l_env.h" @@ -91,6 +92,7 @@ void GameScripting::InitializeModApi(lua_State *L, int top) // Register reference classes (userdata) InvRef::Register(L); + LuaAreaStore::Register(L); LuaItemStack::Register(L); LuaPerlinNoise::Register(L); LuaPerlinNoiseMap::Register(L); @@ -103,7 +105,7 @@ void GameScripting::InitializeModApi(lua_State *L, int top) LuaSettings::Register(L); } -void log_deprecated(std::string message) +void log_deprecated(const std::string &message) { - log_deprecated(NULL,message); + log_deprecated(NULL, message); } diff --git a/src/script/scripting_game.h b/src/script/scripting_game.h index 0412ceb9..92683e73 100644 --- a/src/script/scripting_game.h +++ b/src/script/scripting_game.h @@ -52,6 +52,6 @@ private: void InitializeModApi(lua_State *L, int top); }; -void log_deprecated(std::string message); +void log_deprecated(const std::string &message); #endif /* SCRIPTING_GAME_H_ */ diff --git a/src/script/scripting_mainmenu.cpp b/src/script/scripting_mainmenu.cpp index 4a0545d5..c5967b2f 100644 --- a/src/script/scripting_mainmenu.cpp +++ b/src/script/scripting_mainmenu.cpp @@ -78,7 +78,7 @@ void MainMenuScripting::initializeModApi(lua_State *L, int top) /******************************************************************************/ void MainMenuScripting::step() { - asyncEngine.step(getStack(), m_errorhandler); + asyncEngine.step(getStack()); } /******************************************************************************/ diff --git a/src/serialization.h b/src/serialization.h index 7493f9af..97e2c5d1 100644 --- a/src/serialization.h +++ b/src/serialization.h @@ -30,11 +30,11 @@ with this program; if not, write to the Free Software Foundation, Inc., -------------------------------- For map data (blocks, nodes, sectors). - + NOTE: The goal is to increment this so that saved maps will be loadable by any version. Other compatibility is not maintained. - + 0: original networked test with 1-byte nodes 1: update with 2-byte nodes 2: lighting is transmitted in param @@ -70,14 +70,14 @@ with this program; if not, write to the Free Software Foundation, Inc., // Saved on disk version #define SER_FMT_VER_HIGHEST_WRITE 25 // Lowest supported serialization version -#define SER_FMT_VER_LOWEST 0 -// Lowest client supported serialization version +#define SER_FMT_VER_LOWEST_READ 0 +// Lowest serialization version for writing // Can't do < 24 anymore; we have 16-bit dynamically allocated node IDs // in memory; conversion just won't work in this direction. -#define SER_FMT_CLIENT_VER_LOWEST 24 +#define SER_FMT_VER_LOWEST_WRITE 24 inline bool ser_ver_supported(s32 v) { - return v >= SER_FMT_VER_LOWEST && v <= SER_FMT_VER_HIGHEST_READ; + return v >= SER_FMT_VER_LOWEST_READ && v <= SER_FMT_VER_HIGHEST_READ; } /* diff --git a/src/server.cpp b/src/server.cpp index 37bb7e08..8b2ac6e5 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -26,7 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "ban.h" #include "environment.h" #include "map.h" -#include "jthread/jmutexautolock.h" +#include "threading/mutex_auto_lock.h" #include "constants.h" #include "voxel.h" #include "config.h" @@ -71,65 +71,48 @@ public: {} }; -class ServerThread : public JThread +class ServerThread : public Thread { - Server *m_server; - public: ServerThread(Server *server): - JThread(), + Thread("Server"), m_server(server) - { - } + {} - void * Thread(); + void *run(); + +private: + Server *m_server; }; -void * ServerThread::Thread() +void *ServerThread::run() { - log_register_thread("ServerThread"); - - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); BEGIN_DEBUG_EXCEPTION_HANDLER m_server->AsyncRunStep(true); - ThreadStarted(); - - porting::setThreadName("ServerThread"); - - while(!StopRequested()) - { - try{ + while (!stopRequested()) { + try { //TimeTaker timer("AsyncRunStep() + Receive()"); m_server->AsyncRunStep(); m_server->Receive(); - } - catch(con::NoIncomingDataException &e) - { - } - catch(con::PeerNotFoundException &e) - { + } catch (con::NoIncomingDataException &e) { + } catch (con::PeerNotFoundException &e) { infostream<<"Server: PeerNotFoundException"<setAsyncFatalError(e.what()); - } - catch(LuaError &e) - { + } catch (ClientNotFoundException &e) { + } catch (con::ConnectionBindFailed &e) { m_server->setAsyncFatalError(e.what()); + } catch (LuaError &e) { + m_server->setAsyncFatalError("Lua: " + std::string(e.what())); } } - END_DEBUG_EXCEPTION_HANDLER(errorstream) + END_DEBUG_EXCEPTION_HANDLER return NULL; } @@ -191,6 +174,7 @@ Server::Server( m_uptime(0), m_clients(&m_con), m_shutdown_requested(false), + m_shutdown_ask_reconnect(false), m_ignore_map_edit_events(false), m_ignore_map_edit_events_peer_id(0), m_next_sound_id(0) @@ -239,11 +223,9 @@ Server::Server( m_mods = modconf.getMods(); std::vector unsatisfied_mods = modconf.getUnsatisfiedMods(); // complain about mods with unsatisfied dependencies - if(!modconf.isConsistent()) - { + if(!modconf.isConsistent()) { for(std::vector::iterator it = unsatisfied_mods.begin(); - it != unsatisfied_mods.end(); ++it) - { + it != unsatisfied_mods.end(); ++it) { ModSpec mod = *it; errorstream << "mod \"" << mod.name << "\" has unsatisfied dependencies: "; for(std::set::iterator dep_it = mod.unsatisfied_depends.begin(); @@ -259,8 +241,7 @@ Server::Server( std::vector names = worldmt_settings.getNames(); std::set load_mod_names; for(std::vector::iterator it = names.begin(); - it != names.end(); ++it) - { + it != names.end(); ++it) { std::string name = *it; if(name.compare(0,9,"load_mod_")==0 && worldmt_settings.getBool(name)) load_mod_names.insert(name.substr(9)); @@ -272,8 +253,7 @@ Server::Server( for(std::vector::iterator it = unsatisfied_mods.begin(); it != unsatisfied_mods.end(); ++it) load_mod_names.erase((*it).name); - if(!load_mod_names.empty()) - { + if(!load_mod_names.empty()) { errorstream << "The following mods could not be found:"; for(std::set::iterator it = load_mod_names.begin(); it != load_mod_names.end(); ++it) @@ -281,8 +261,8 @@ Server::Server( errorstream << std::endl; } - // Lock environment - JMutexAutoLock envlock(m_env_mutex); + //lock environment + MutexAutoLock envlock(m_env_mutex); // Load mapgen params from Settings m_emerge->loadMapgenParams(); @@ -297,36 +277,29 @@ Server::Server( std::string script_path = getBuiltinLuaPath() + DIR_DELIM "init.lua"; - if (!m_script->loadMod(script_path, BUILTIN_MOD_NAME)) { - throw ModError("Failed to load and run " + script_path); - } + m_script->loadMod(script_path, BUILTIN_MOD_NAME); // Print mods infostream << "Server: Loading mods: "; for(std::vector::iterator i = m_mods.begin(); - i != m_mods.end(); i++){ + i != m_mods.end(); ++i) { const ModSpec &mod = *i; infostream << mod.name << " "; } infostream << std::endl; // Load and run "mod" scripts - for (std::vector::iterator i = m_mods.begin(); - i != m_mods.end(); i++) { - const ModSpec &mod = *i; + for (std::vector::iterator it = m_mods.begin(); + it != m_mods.end(); ++it) { + const ModSpec &mod = *it; if (!string_allowed(mod.name, MODNAME_ALLOWED_CHARS)) { - errorstream << "Error loading mod \"" << mod.name - << "\": mod_name does not follow naming conventions: " - << "Only chararacters [a-z0-9_] are allowed." << std::endl; - throw ModError("Mod \"" + mod.name + "\" does not follow naming conventions."); + throw ModError("Error loading mod \"" + mod.name + + "\": Mod name does not follow naming conventions: " + "Only chararacters [a-z0-9_] are allowed."); } - std::string script_path = mod.path + DIR_DELIM "init.lua"; + std::string script_path = mod.path + DIR_DELIM + "init.lua"; infostream << " [" << padStringRight(mod.name, 12) << "] [\"" << script_path << "\"]" << std::endl; - if (!m_script->loadMod(script_path, mod.name)) { - errorstream << "Server: Failed to load and run " - << script_path << std::endl; - throw ModError("Failed to load and run " + script_path); - } + m_script->loadMod(script_path, mod.name); } // Read Textures and calculate sha1 sums @@ -389,15 +362,28 @@ Server::~Server() SendChatMessage(PEER_ID_INEXISTENT, L"*** Server shutting down"); { - JMutexAutoLock envlock(m_env_mutex); + MutexAutoLock envlock(m_env_mutex); // Execute script shutdown hooks m_script->on_shutdown(); - infostream<<"Server: Saving players"<saveLoadedPlayers(); - infostream<<"Server: Saving environment metadata"<get("kick_msg_shutdown"); + } + m_env->kickAllPlayers(SERVER_ACCESSDENIED_SHUTDOWN, + kick_msg, reconnect); + + infostream << "Server: Saving environment metadata" << std::endl; m_env->saveMeta(); } @@ -429,14 +415,14 @@ Server::~Server() // Delete detached inventories for (std::map::iterator i = m_detached_inventories.begin(); - i != m_detached_inventories.end(); i++) { + i != m_detached_inventories.end(); ++i) { delete i->second; } } void Server::start(Address bind_addr) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); m_bind_addr = bind_addr; @@ -444,27 +430,16 @@ void Server::start(Address bind_addr) << bind_addr.serializeString() <<"..."<Stop(); + m_thread->stop(); // Initialize connection m_con.SetTimeoutMs(30); m_con.Serve(bind_addr); // Start thread - m_thread->Start(); + m_thread->start(); -#if 0 // ASCII art for the win! - actionstream - << " __ __ _ _ _ ___ __ _ " << std::endl - << "| \\/ |_ _| | |_(_)/ __|_ _ __ _ / _| |_ " << std::endl - << "| |\\/| | || | | _| | (__| '_/ _` | _| _|" << std::endl - << "|_| |_|\\_,_|_|\\__|_|\\___|_| \\__,_|_| \\__|" << std::endl - ; -#else - actionstream << "MultiCraft" << std::endl; -#endif - actionstream<<"World at ["<Stop(); + m_thread->stop(); //m_emergethread.setRun(false); - m_thread->Wait(); + m_thread->wait(); //m_emergethread.stop(); infostream<<"Server: Threads stopped"< 2.0) + if (dtime > 2.0) dtime = 2.0; { - JMutexAutoLock lock(m_step_dtime_mutex); + MutexAutoLock lock(m_step_dtime_mutex); m_step_dtime += dtime; } // Throw if fatal error occurred in thread std::string async_err = m_async_fatal_error.get(); - if(async_err != "") { - if (m_simple_singleplayer_mode) { - throw ServerError(async_err); - } - else { - errorstream << "UNRECOVERABLE error occurred. Stopping server. " - << "Please fix the following error:" << std::endl - << async_err << std::endl; - FATAL_ERROR(async_err.c_str()); + if (!async_err.empty()) { + if (!m_simple_singleplayer_mode) { + m_env->kickAllPlayers(SERVER_ACCESSDENIED_CRASH, + g_settings->get("kick_msg_crash"), + g_settings->getBool("ask_reconnect_on_crash")); } + throw ServerError(async_err); } } void Server::AsyncRunStep(bool initial_step) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); g_profiler->add("Server::AsyncRunStep (num)", 1); float dtime; { - JMutexAutoLock lock1(m_step_dtime_mutex); + MutexAutoLock lock1(m_step_dtime_mutex); dtime = m_step_dtime; } @@ -537,7 +509,7 @@ void Server::AsyncRunStep(bool initial_step) //infostream<<"Server::AsyncRunStep(): dtime="<getMaxLagEstimate(); max_lag *= 0.9998; // Decrease slowly (about half per 5 minutes) @@ -588,11 +560,12 @@ void Server::AsyncRunStep(bool initial_step) static const float map_timer_and_unload_dtime = 2.92; if(m_map_timer_and_unload_interval.step(dtime, map_timer_and_unload_dtime)) { - JMutexAutoLock lock(m_env_mutex); + MutexAutoLock lock(m_env_mutex); // Run Map's timers and unload unused data ScopeProfiler sp(g_profiler, "Server: map timer and unload"); m_env->getMap().timerUpdate(map_timer_and_unload_dtime, - g_settings->getFloat("server_unload_unused_data_timeout")); + g_settings->getFloat("server_unload_unused_data_timeout"), + U32_MAX); } /* @@ -605,7 +578,7 @@ void Server::AsyncRunStep(bool initial_step) { m_liquid_transform_timer -= m_liquid_transform_every; - JMutexAutoLock lock(m_env_mutex); + MutexAutoLock lock(m_env_mutex); ScopeProfiler sp(g_profiler, "Server: liquid transform"); @@ -666,9 +639,9 @@ void Server::AsyncRunStep(bool initial_step) */ { //infostream<<"Server: Checking added and deleted active objects"< clients = m_clients.getClientList(); ScopeProfiler sp(g_profiler, "Server: checking added and deleted objs"); @@ -683,10 +656,9 @@ void Server::AsyncRunStep(bool initial_step) radius *= MAP_BLOCKSIZE; player_radius *= MAP_BLOCKSIZE; - for(std::map::iterator + for (std::map::iterator i = clients.begin(); - i != clients.end(); ++i) - { + i != clients.end(); ++i) { RemoteClient *client = i->second; // If definitions and textures have not been sent, don't @@ -695,27 +667,23 @@ void Server::AsyncRunStep(bool initial_step) continue; Player *player = m_env->getPlayer(client->peer_id); - if(player==NULL) - { + if(player == NULL) { // This can happen if the client timeouts somehow - /*infostream<<"WARNING: "<<__FUNCTION_NAME<<": Client " + /*warningstream<peer_id <<" has no associated player"<getPosition(), BS); - std::set removed_objects; - std::set added_objects; - m_env->getRemovedActiveObjects(pos, radius, player_radius, + std::queue removed_objects; + std::queue added_objects; + m_env->getRemovedActiveObjects(player, radius, player_radius, client->m_known_objects, removed_objects); - m_env->getAddedActiveObjects(pos, radius, player_radius, + m_env->getAddedActiveObjects(player, radius, player_radius, client->m_known_objects, added_objects); // Ignore if nothing happened - if(removed_objects.empty() && added_objects.empty()) - { - //infostream<<"active objects: none changed"<::iterator - i = removed_objects.begin(); - i != removed_objects.end(); ++i) - { + while (!removed_objects.empty()) { // Get object - u16 id = *i; + u16 id = removed_objects.front(); ServerActiveObject* obj = m_env->getActiveObject(id); // Add to data buffer for sending @@ -743,23 +708,21 @@ void Server::AsyncRunStep(bool initial_step) if(obj && obj->m_known_by_count > 0) obj->m_known_by_count--; + removed_objects.pop(); } // Handle added objects writeU16((u8*)buf, added_objects.size()); data_buffer.append(buf, 2); - for(std::set::iterator - i = added_objects.begin(); - i != added_objects.end(); ++i) - { + while (!added_objects.empty()) { // Get object - u16 id = *i; + u16 id = added_objects.front(); ServerActiveObject* obj = m_env->getActiveObject(id); // Get object type u8 type = ACTIVEOBJECT_TYPE_INVALID; if(obj == NULL) - infostream<<"WARNING: "<<__FUNCTION_NAME + warningstream<getSendType(); @@ -781,6 +744,8 @@ void Server::AsyncRunStep(bool initial_step) if(obj) obj->m_known_by_count++; + + added_objects.pop(); } u32 pktSize = SendActiveObjectRemoveAdd(client->peer_id, data_buffer); @@ -789,14 +754,14 @@ void Server::AsyncRunStep(bool initial_step) << added_objects.size() << " added, " << "packet size is " << pktSize << std::endl; } - m_clients.Unlock(); + m_clients.unlock(); } /* Send object messages */ { - JMutexAutoLock envlock(m_env_mutex); + MutexAutoLock envlock(m_env_mutex); ScopeProfiler sp(g_profiler, "Server: sending object messages"); // Key = object id @@ -822,7 +787,7 @@ void Server::AsyncRunStep(bool initial_step) message_list->push_back(aom); } - m_clients.Lock(); + m_clients.lock(); std::map clients = m_clients.getClientList(); // Route data to every client for (std::map::iterator @@ -873,7 +838,7 @@ void Server::AsyncRunStep(bool initial_step) SendActiveObjectMessages(client->peer_id, unreliable_data, false); } } - m_clients.Unlock(); + m_clients.unlock(); // Clear buffered_messages for(std::map* >::iterator @@ -888,7 +853,7 @@ void Server::AsyncRunStep(bool initial_step) */ { // We will be accessing the environment - JMutexAutoLock lock(m_env_mutex); + MutexAutoLock lock(m_env_mutex); // Don't send too many at a time //u32 count = 0; @@ -942,7 +907,7 @@ void Server::AsyncRunStep(bool initial_step) break; default: prof.add("unknown", 1); - infostream << "WARNING: Server: Unknown MapEditEvent " + warningstream << "Server: Unknown MapEditEvent " << ((u32)event->type) << std::endl; break; } @@ -1009,7 +974,7 @@ void Server::AsyncRunStep(bool initial_step) if(counter >= g_settings->getFloat("server_map_save_interval")) { counter = 0.0; - JMutexAutoLock lock(m_env_mutex); + MutexAutoLock lock(m_env_mutex); ScopeProfiler sp(g_profiler, "Server: saving stuff"); @@ -1032,7 +997,7 @@ void Server::AsyncRunStep(bool initial_step) void Server::Receive() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); SharedBuffer data; u16 peer_id; try { @@ -1065,18 +1030,18 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id) { std::string playername = ""; PlayerSAO *playersao = NULL; - m_clients.Lock(); + m_clients.lock(); try { RemoteClient* client = m_clients.lockedGetClientNoEx(peer_id, CS_InitDone); if (client != NULL) { playername = client->getName(); - playersao = emergePlayer(playername.c_str(), peer_id); + playersao = emergePlayer(playername.c_str(), peer_id, client->net_proto_version); } } catch (std::exception &e) { - m_clients.Unlock(); + m_clients.unlock(); throw; } - m_clients.Unlock(); + m_clients.unlock(); RemotePlayer *player = static_cast(m_env->getPlayer(playername.c_str())); @@ -1112,7 +1077,7 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id) SendInventory(playersao); // Send HP - SendPlayerHPOrDie(peer_id, playersao->getHP() == 0); + SendPlayerHPOrDie(playersao); // Send Breath SendPlayerBreath(peer_id); @@ -1152,7 +1117,7 @@ PlayerSAO* Server::StageTwoClientInit(u16 peer_id) actionstream<getName() <<" joins game. List of players: "; for (std::vector::iterator i = names.begin(); - i != names.end(); i++) { + i != names.end(); ++i) { actionstream << *i << " "; } @@ -1169,9 +1134,9 @@ inline void Server::handleCommand(NetworkPacket* pkt) void Server::ProcessData(NetworkPacket *pkt) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // Environment is locked first. - JMutexAutoLock envlock(m_env_mutex); + MutexAutoLock envlock(m_env_mutex); ScopeProfiler sp(g_profiler, "Server::ProcessData"); u32 peer_id = pkt->getPeerId(); @@ -1187,7 +1152,7 @@ void Server::ProcessData(NetworkPacket *pkt) << ban_name << std::endl; // This actually doesn't seem to transfer to the client DenyAccess_Legacy(peer_id, L"Your ip is banned. Banned name was " - + narrow_to_wide(ban_name)); + + utf8_to_wide(ban_name)); return; } } @@ -1210,6 +1175,7 @@ void Server::ProcessData(NetworkPacket *pkt) if (command >= TOSERVER_NUM_MSG_TYPES) { infostream << "Server: Ignoring unknown command " << command << std::endl; + return; } if (toServerCommandTable[command].state == TOSERVER_STATE_NOT_CONNECTED) { @@ -1259,6 +1225,11 @@ void Server::setTimeOfDay(u32 time) m_time_of_day_send_timer = 0; } +u32 Server::getTimeOfDay() +{ + return m_env->getTimeOfDay(); +} + void Server::onMapEditEvent(MapEditEvent *event) { if(m_ignore_map_edit_events) @@ -1352,19 +1323,19 @@ void Server::setInventoryModified(const InventoryLocation &loc, bool playerSend) void Server::SetBlocksNotSent(std::map& block) { std::vector clients = m_clients.getClientIDs(); - m_clients.Lock(); + m_clients.lock(); // Set the modified blocks unsent for all the clients for (std::vector::iterator i = clients.begin(); i != clients.end(); ++i) { if (RemoteClient *client = m_clients.lockedGetClientNoEx(*i)) client->SetBlocksNotSent(block); } - m_clients.Unlock(); + m_clients.unlock(); } void Server::peerAdded(con::Peer *peer) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); verbosestream<<"Server::peerAdded(): peer->id=" <id<id=" <id<<", timeout="<getPatch(); *vers_string = client->getPatch(); - m_clients.Unlock(); + m_clients.unlock(); return true; } @@ -1469,7 +1440,7 @@ void Server::Send(NetworkPacket* pkt) void Server::SendMovement(u16 peer_id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); std::ostringstream os(std::ios_base::binary); NetworkPacket pkt(TOCLIENT_MOVEMENT, 12 * sizeof(float), peer_id); @@ -1490,9 +1461,23 @@ void Server::SendMovement(u16 peer_id) Send(&pkt); } +void Server::SendPlayerHPOrDie(PlayerSAO *playersao) +{ + if (!g_settings->getBool("enable_damage")) + return; + + u16 peer_id = playersao->getPeerID(); + bool is_alive = playersao->getHP() > 0; + + if (is_alive) + SendPlayerHP(peer_id); + else + DiePlayer(peer_id); +} + void Server::SendHP(u16 peer_id, u8 hp) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_HP, 1, peer_id); pkt << hp; @@ -1501,29 +1486,31 @@ void Server::SendHP(u16 peer_id, u8 hp) void Server::SendBreath(u16 peer_id, u16 breath) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_BREATH, 2, peer_id); pkt << (u16) breath; Send(&pkt); } -void Server::SendAccessDenied(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason) +void Server::SendAccessDenied(u16 peer_id, AccessDeniedCode reason, + const std::string &custom_reason, bool reconnect) { - DSTACK(__FUNCTION_NAME); + assert(reason < SERVER_ACCESSDENIED_MAX); NetworkPacket pkt(TOCLIENT_ACCESS_DENIED, 1, peer_id); - pkt << (u8) reason; - - if (reason == SERVER_ACCESSDENIED_CUSTOM_STRING) { + pkt << (u8)reason; + if (reason == SERVER_ACCESSDENIED_CUSTOM_STRING) pkt << custom_reason; - } + else if (reason == SERVER_ACCESSDENIED_SHUTDOWN || + reason == SERVER_ACCESSDENIED_CRASH) + pkt << custom_reason << (u8)reconnect; Send(&pkt); } void Server::SendAccessDenied_Legacy(u16 peer_id,const std::wstring &reason) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_ACCESS_DENIED_LEGACY, 0, peer_id); pkt << reason; @@ -1533,7 +1520,7 @@ void Server::SendAccessDenied_Legacy(u16 peer_id,const std::wstring &reason) void Server::SendDeathscreen(u16 peer_id,bool set_camera_point_target, v3f camera_point_target) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_DEATHSCREEN, 1 + sizeof(v3f), peer_id); pkt << set_camera_point_target << camera_point_target; @@ -1543,7 +1530,7 @@ void Server::SendDeathscreen(u16 peer_id,bool set_camera_point_target, void Server::SendItemDef(u16 peer_id, IItemDefManager *itemdef, u16 protocol_version) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_ITEMDEF, 0, peer_id); @@ -1568,7 +1555,7 @@ void Server::SendItemDef(u16 peer_id, void Server::SendNodeDef(u16 peer_id, INodeDefManager *nodedef, u16 protocol_version) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_NODEDEF, 0, peer_id); @@ -1597,7 +1584,7 @@ void Server::SendNodeDef(u16 peer_id, void Server::SendInventory(PlayerSAO* playerSAO) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); UpdateCrafting(playerSAO->getPlayer()); @@ -1618,7 +1605,7 @@ void Server::SendInventory(PlayerSAO* playerSAO) void Server::SendChatMessage(u16 peer_id, const std::wstring &message) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_CHAT_MESSAGE, 0, peer_id); pkt << message; @@ -1634,7 +1621,7 @@ void Server::SendChatMessage(u16 peer_id, const std::wstring &message) void Server::SendShowFormspecMessage(u16 peer_id, const std::string &formspec, const std::string &formname) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_SHOW_FORMSPEC, 0 , peer_id); @@ -1649,7 +1636,7 @@ void Server::SendSpawnParticle(u16 peer_id, v3f pos, v3f velocity, v3f accelerat float expirationtime, float size, bool collisiondetection, bool vertical, std::string texture) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_SPAWN_PARTICLE, 0, peer_id); @@ -1671,7 +1658,7 @@ void Server::SendAddParticleSpawner(u16 peer_id, u16 amount, float spawntime, v3 v3f minvel, v3f maxvel, v3f minacc, v3f maxacc, float minexptime, float maxexptime, float minsize, float maxsize, bool collisiondetection, bool vertical, std::string texture, u32 id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_ADD_PARTICLESPAWNER, 0, peer_id); @@ -1693,7 +1680,7 @@ void Server::SendAddParticleSpawner(u16 peer_id, u16 amount, float spawntime, v3 void Server::SendDeleteParticleSpawner(u16 peer_id, u32 id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_DELETE_PARTICLESPAWNER_LEGACY, 2, peer_id); @@ -1803,7 +1790,7 @@ void Server::SendOverrideDayNightRatio(u16 peer_id, bool do_override, void Server::SendTimeOfDay(u16 peer_id, u16 time, f32 time_speed) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_TIME_OF_DAY, 0, peer_id); pkt << time << time_speed; @@ -1818,7 +1805,7 @@ void Server::SendTimeOfDay(u16 peer_id, u16 time, f32 time_speed) void Server::SendPlayerHP(u16 peer_id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); PlayerSAO *playersao = getPlayerSAO(peer_id); // In some rare case, if the player is disconnected // while Lua call l_punch, for example, this can be NULL @@ -1836,7 +1823,7 @@ void Server::SendPlayerHP(u16 peer_id) void Server::SendPlayerBreath(u16 peer_id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); PlayerSAO *playersao = getPlayerSAO(peer_id); assert(playersao); @@ -1846,7 +1833,7 @@ void Server::SendPlayerBreath(u16 peer_id) void Server::SendMovePlayer(u16 peer_id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); Player *player = m_env->getPlayer(peer_id); assert(player); @@ -1898,7 +1885,7 @@ void Server::SendPlayerPrivileges(u16 peer_id) pkt << (u16) privs.size(); for(std::set::const_iterator i = privs.begin(); - i != privs.end(); i++) { + i != privs.end(); ++i) { pkt << (*i); } @@ -1998,7 +1985,7 @@ s32 Server::playSound(const SimpleSoundSpec &spec, << (u8) params.type << pos << params.object << params.loop; for(std::vector::iterator i = dst_clients.begin(); - i != dst_clients.end(); i++) { + i != dst_clients.end(); ++i) { psound.clients.insert(*i); m_clients.send(*i, 0, &pkt, true); } @@ -2017,7 +2004,7 @@ void Server::stopSound(s32 handle) pkt << handle; for(std::set::iterator i = psound.clients.begin(); - i != psound.clients.end(); i++) { + i != psound.clients.end(); ++i) { // Send as reliable m_clients.send(*i, 0, &pkt, true); } @@ -2078,7 +2065,7 @@ void Server::sendAddNode(v3s16 p, MapNode n, u16 ignore_id, } NetworkPacket pkt(TOCLIENT_ADDNODE, 6 + 2 + 1 + 1 + 1); - m_clients.Lock(); + m_clients.lock(); RemoteClient* client = m_clients.lockedGetClientNoEx(*i); if (client != 0) { pkt << p << n.param0 << n.param1 << n.param2 @@ -2088,11 +2075,11 @@ void Server::sendAddNode(v3s16 p, MapNode n, u16 ignore_id, if (client->net_proto_version <= 21) { // Old clients always clear metadata; fix it // by sending the full block again. - client->SetBlockNotSent(p); + client->SetBlockNotSent(getNodeBlockPos(p)); } } } - m_clients.Unlock(); + m_clients.unlock(); // Send as reliable if (pkt.getSize() > 0) @@ -2103,18 +2090,18 @@ void Server::sendAddNode(v3s16 p, MapNode n, u16 ignore_id, void Server::setBlockNotSent(v3s16 p) { std::vector clients = m_clients.getClientIDs(); - m_clients.Lock(); + m_clients.lock(); for(std::vector::iterator i = clients.begin(); i != clients.end(); ++i) { RemoteClient *client = m_clients.lockedGetClientNoEx(*i); client->SetBlockNotSent(p); } - m_clients.Unlock(); + m_clients.unlock(); } void Server::SendBlockNoLock(u16 peer_id, MapBlock *block, u8 ver, u16 net_proto_version) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); v3s16 p = block->getPos(); @@ -2136,9 +2123,9 @@ void Server::SendBlockNoLock(u16 peer_id, MapBlock *block, u8 ver, u16 net_proto void Server::SendBlocks(float dtime) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); - JMutexAutoLock envlock(m_env_mutex); + MutexAutoLock envlock(m_env_mutex); //TODO check if one big lock could be faster then multiple small ones ScopeProfiler sp(g_profiler, "Server: sel and send blocks to clients"); @@ -2152,7 +2139,7 @@ void Server::SendBlocks(float dtime) std::vector clients = m_clients.getClientIDs(); - m_clients.Lock(); + m_clients.lock(); for(std::vector::iterator i = clients.begin(); i != clients.end(); ++i) { RemoteClient *client = m_clients.lockedGetClientNoEx(*i, CS_Active); @@ -2163,7 +2150,7 @@ void Server::SendBlocks(float dtime) total_sending += client->SendingCount(); client->GetNextBlocks(m_env,m_emerge, dtime, queue); } - m_clients.Unlock(); + m_clients.unlock(); } // Sort. @@ -2171,7 +2158,7 @@ void Server::SendBlocks(float dtime) // Lowest is most important. std::sort(queue.begin(), queue.end()); - m_clients.Lock(); + m_clients.lock(); for(u32 i=0; iSentBlock(q.pos); total_sending++; } - m_clients.Unlock(); + m_clients.unlock(); } void Server::fillMediaCache() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); infostream<<"Server: Calculating media file checksums"< paths; for(std::vector::iterator i = m_mods.begin(); - i != m_mods.end(); i++) { + i != m_mods.end(); ++i) { const ModSpec &mod = *i; paths.push_back(mod.path + DIR_DELIM + "textures"); paths.push_back(mod.path + DIR_DELIM + "sounds"); @@ -2224,7 +2211,7 @@ void Server::fillMediaCache() // Collect media file information from paths into cache for(std::vector::iterator i = paths.begin(); - i != paths.end(); i++) { + i != paths.end(); ++i) { std::string mediapath = *i; std::vector dirlist = fs::GetDirListing(mediapath); for (u32 j = 0; j < dirlist.size(); j++) { @@ -2300,44 +2287,22 @@ void Server::fillMediaCache() } } -struct SendableMediaAnnouncement -{ - std::string name; - std::string sha1_digest; - - SendableMediaAnnouncement(const std::string &name_="", - const std::string &sha1_digest_=""): - name(name_), - sha1_digest(sha1_digest_) - {} -}; - void Server::sendMediaAnnouncement(u16 peer_id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); - verbosestream<<"Server: Announcing files to id("< file_announcements; - - for (std::map::iterator i = m_media.begin(); - i != m_media.end(); i++){ - // Put in list - file_announcements.push_back( - SendableMediaAnnouncement(i->first, i->second.sha1_digest)); - } + verbosestream << "Server: Announcing files to id(" << peer_id << ")" + << std::endl; // Make packet std::ostringstream os(std::ios_base::binary); NetworkPacket pkt(TOCLIENT_ANNOUNCE_MEDIA, 0, peer_id); - pkt << (u16) file_announcements.size(); + pkt << (u16) m_media.size(); - for (std::vector::iterator - j = file_announcements.begin(); - j != file_announcements.end(); ++j) { - pkt << j->name << j->sha1_digest; + for (std::map::iterator i = m_media.begin(); + i != m_media.end(); ++i) { + pkt << i->first << i->second.sha1_digest; } pkt << g_settings->get("remote_media"); @@ -2361,7 +2326,7 @@ struct SendableMedia void Server::sendRequestedMedia(u16 peer_id, const std::vector &tosend) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); verbosestream<<"Server::sendRequestedMedia(): " <<"Sending files to client"<::iterator i = m_detached_inventories.begin(); - i != m_detached_inventories.end(); i++) { + i != m_detached_inventories.end(); ++i) { const std::string &name = i->first; //Inventory *inv = i->second; sendDetachedInventory(name, peer_id); @@ -2510,7 +2475,7 @@ void Server::sendDetachedInventories(u16 peer_id) void Server::DiePlayer(u16 peer_id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); PlayerSAO *playersao = getPlayerSAO(peer_id); assert(playersao); @@ -2530,7 +2495,7 @@ void Server::DiePlayer(u16 peer_id) void Server::RespawnPlayer(u16 peer_id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); PlayerSAO *playersao = getPlayerSAO(peer_id); assert(playersao); @@ -2552,17 +2517,37 @@ void Server::RespawnPlayer(u16 peer_id) playersao->setPos(pos); } } + + void Server::DenySudoAccess(u16 peer_id) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); NetworkPacket pkt(TOCLIENT_DENY_SUDO_MODE, 0, peer_id); Send(&pkt); } + +void Server::DenyAccessVerCompliant(u16 peer_id, u16 proto_ver, AccessDeniedCode reason, + const std::string &str_reason, bool reconnect) +{ + if (proto_ver >= 25) { + SendAccessDenied(peer_id, reason, str_reason); + } else { + std::wstring wreason = utf8_to_wide( + reason == SERVER_ACCESSDENIED_CUSTOM_STRING ? str_reason : + accessDeniedStrings[(u8)reason]); + SendAccessDenied_Legacy(peer_id, wreason); + } + + m_clients.event(peer_id, CSE_SetDenied); + m_con.DisconnectPeer(peer_id); +} + + void Server::DenyAccess(u16 peer_id, AccessDeniedCode reason, const std::string &custom_reason) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); SendAccessDenied(peer_id, reason, custom_reason); m_clients.event(peer_id, CSE_SetDenied); @@ -2573,7 +2558,7 @@ void Server::DenyAccess(u16 peer_id, AccessDeniedCode reason, const std::string // the minimum version for MT users, maybe in 1 year void Server::DenyAccess_Legacy(u16 peer_id, const std::wstring &reason) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); SendAccessDenied_Legacy(peer_id, reason); m_clients.event(peer_id, CSE_SetDenied); @@ -2582,7 +2567,7 @@ void Server::DenyAccess_Legacy(u16 peer_id, const std::wstring &reason) void Server::acceptAuth(u16 peer_id, bool forSudoMode) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); if (!forSudoMode) { RemoteClient* client = getClient(peer_id, CS_Invalid); @@ -2613,7 +2598,7 @@ void Server::acceptAuth(u16 peer_id, bool forSudoMode) void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); std::wstring message; { /* @@ -2628,7 +2613,7 @@ void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason) if(psound.clients.empty()) m_playing_sounds.erase(i++); else - i++; + ++i; } Player *player = m_env->getPlayer(peer_id); @@ -2684,7 +2669,7 @@ void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason) } } { - JMutexAutoLock env_lock(m_env_mutex); + MutexAutoLock env_lock(m_env_mutex); m_clients.DeleteClient(peer_id); } } @@ -2696,13 +2681,14 @@ void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason) void Server::UpdateCrafting(Player* player) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); // Get a preview for crafting ItemStack preview; InventoryLocation loc; loc.setPlayer(player->getName()); - getCraftingResult(&player->inventory, preview, false, this); + std::vector output_replacements; + getCraftingResult(&player->inventory, preview, output_replacements, false, this); m_env->getScriptIface()->item_CraftPredict(preview, player->getPlayerSAO(), (&player->inventory)->getList("craft"), loc); // Put the new preview in @@ -2839,8 +2825,12 @@ std::string Server::getBanDescription(const std::string &ip_or_name) void Server::notifyPlayer(const char *name, const std::wstring &msg) { + // m_env will be NULL if the server is initializing + if (!m_env) + return; + Player *player = m_env->getPlayer(name); - if(!player) + if (!player) return; if (player->peer_id == PEER_ID_INEXISTENT) @@ -2849,21 +2839,23 @@ void Server::notifyPlayer(const char *name, const std::wstring &msg) SendChatMessage(player->peer_id, msg); } -bool Server::showFormspec(const char *playername, const std::string &formspec, const std::string &formname) +bool Server::showFormspec(const char *playername, const std::string &formspec, + const std::string &formname) { - Player *player = m_env->getPlayer(playername); - - if(!player) - { - infostream<<"showFormspec: couldn't find player:"<getPlayer(playername); + if (!player) return false; - } SendShowFormspecMessage(player->peer_id, formspec, formname); return true; } -u32 Server::hudAdd(Player *player, HudElement *form) { +u32 Server::hudAdd(Player *player, HudElement *form) +{ if (!player) return -1; @@ -2889,7 +2881,8 @@ bool Server::hudRemove(Player *player, u32 id) { return true; } -bool Server::hudChange(Player *player, u32 id, HudElementStat stat, void *data) { +bool Server::hudChange(Player *player, u32 id, HudElementStat stat, void *data) +{ if (!player) return false; @@ -2897,7 +2890,8 @@ bool Server::hudChange(Player *player, u32 id, HudElementStat stat, void *data) return true; } -bool Server::hudSetFlags(Player *player, u32 flags, u32 mask) { +bool Server::hudSetFlags(Player *player, u32 flags, u32 mask) +{ if (!player) return false; @@ -2913,7 +2907,8 @@ bool Server::hudSetFlags(Player *player, u32 flags, u32 mask) { return true; } -bool Server::hudSetHotbarItemcount(Player *player, s32 hotbar_itemcount) { +bool Server::hudSetHotbarItemcount(Player *player, s32 hotbar_itemcount) +{ if (!player) return false; if (hotbar_itemcount <= 0 || hotbar_itemcount > HUD_HOTBAR_ITEMCOUNT_MAX) @@ -2926,13 +2921,15 @@ bool Server::hudSetHotbarItemcount(Player *player, s32 hotbar_itemcount) { return true; } -s32 Server::hudGetHotbarItemcount(Player *player) { +s32 Server::hudGetHotbarItemcount(Player *player) +{ if (!player) return 0; return player->getHotbarItemcount(); } -void Server::hudSetHotbarImage(Player *player, std::string name) { +void Server::hudSetHotbarImage(Player *player, std::string name) +{ if (!player) return; @@ -2940,13 +2937,15 @@ void Server::hudSetHotbarImage(Player *player, std::string name) { SendHUDSetParam(player->peer_id, HUD_PARAM_HOTBAR_IMAGE, name); } -std::string Server::hudGetHotbarImage(Player *player) { +std::string Server::hudGetHotbarImage(Player *player) +{ if (!player) return ""; return player->getHotbarImage(); } -void Server::hudSetHotbarSelectedImage(Player *player, std::string name) { +void Server::hudSetHotbarSelectedImage(Player *player, std::string name) +{ if (!player) return; @@ -2954,14 +2953,16 @@ void Server::hudSetHotbarSelectedImage(Player *player, std::string name) { SendHUDSetParam(player->peer_id, HUD_PARAM_HOTBAR_SELECTED_IMAGE, name); } -std::string Server::hudGetHotbarSelectedImage(Player *player) { +std::string Server::hudGetHotbarSelectedImage(Player *player) +{ if (!player) return ""; return player->getHotbarSelectedImage(); } -bool Server::setLocalPlayerAnimations(Player *player, v2s32 animation_frames[4], f32 frame_speed) +bool Server::setLocalPlayerAnimations(Player *player, + v2s32 animation_frames[4], f32 frame_speed) { if (!player) return false; @@ -2983,7 +2984,7 @@ bool Server::setPlayerEyeOffset(Player *player, v3f first, v3f third) } bool Server::setSky(Player *player, const video::SColor &bgcolor, - const std::string &type, const std::vector ¶ms) + const std::string &type, const std::vector ¶ms) { if (!player) return false; @@ -2994,7 +2995,7 @@ bool Server::setSky(Player *player, const video::SColor &bgcolor, } bool Server::overrideDayNightRatio(Player *player, bool do_override, - float ratio) + float ratio) { if (!player) return false; @@ -3009,39 +3010,45 @@ void Server::notifyPlayers(const std::wstring &msg) SendChatMessage(PEER_ID_INEXISTENT,msg); } -void Server::spawnParticle(const char *playername, v3f pos, - v3f velocity, v3f acceleration, - float expirationtime, float size, bool - collisiondetection, bool vertical, std::string texture) +void Server::spawnParticle(const std::string &playername, v3f pos, + v3f velocity, v3f acceleration, + float expirationtime, float size, bool + collisiondetection, bool vertical, const std::string &texture) { - Player *player = m_env->getPlayer(playername); - if(!player) + // m_env will be NULL if the server is initializing + if (!m_env) return; - SendSpawnParticle(player->peer_id, pos, velocity, acceleration, + + u16 peer_id = PEER_ID_INEXISTENT; + if (playername != "") { + Player* player = m_env->getPlayer(playername.c_str()); + if (!player) + return; + peer_id = player->peer_id; + } + + SendSpawnParticle(peer_id, pos, velocity, acceleration, expirationtime, size, collisiondetection, vertical, texture); } -void Server::spawnParticleAll(v3f pos, v3f velocity, v3f acceleration, - float expirationtime, float size, - bool collisiondetection, bool vertical, std::string texture) +u32 Server::addParticleSpawner(u16 amount, float spawntime, + v3f minpos, v3f maxpos, v3f minvel, v3f maxvel, v3f minacc, v3f maxacc, + float minexptime, float maxexptime, float minsize, float maxsize, + bool collisiondetection, bool vertical, const std::string &texture, + const std::string &playername) { - SendSpawnParticle(PEER_ID_INEXISTENT,pos, velocity, acceleration, - expirationtime, size, collisiondetection, vertical, texture); -} - -u32 Server::addParticleSpawner(const char *playername, - u16 amount, float spawntime, - v3f minpos, v3f maxpos, - v3f minvel, v3f maxvel, - v3f minacc, v3f maxacc, - float minexptime, float maxexptime, - float minsize, float maxsize, - bool collisiondetection, bool vertical, std::string texture) -{ - Player *player = m_env->getPlayer(playername); - if(!player) + // m_env will be NULL if the server is initializing + if (!m_env) return -1; + u16 peer_id = PEER_ID_INEXISTENT; + if (playername != "") { + Player* player = m_env->getPlayer(playername.c_str()); + if (!player) + return -1; + peer_id = player->peer_id; + } + u32 id = 0; for(;;) // look for unused particlespawner id { @@ -3055,7 +3062,7 @@ u32 Server::addParticleSpawner(const char *playername, } } - SendAddParticleSpawner(player->peer_id, amount, spawntime, + SendAddParticleSpawner(peer_id, amount, spawntime, minpos, maxpos, minvel, maxvel, minacc, maxacc, minexptime, maxexptime, minsize, maxsize, collisiondetection, vertical, texture, id); @@ -3063,55 +3070,25 @@ u32 Server::addParticleSpawner(const char *playername, return id; } -u32 Server::addParticleSpawnerAll(u16 amount, float spawntime, - v3f minpos, v3f maxpos, - v3f minvel, v3f maxvel, - v3f minacc, v3f maxacc, - float minexptime, float maxexptime, - float minsize, float maxsize, - bool collisiondetection, bool vertical, std::string texture) +void Server::deleteParticleSpawner(const std::string &playername, u32 id) { - u32 id = 0; - for(;;) // look for unused particlespawner id - { - id++; - if (std::find(m_particlespawner_ids.begin(), - m_particlespawner_ids.end(), id) - == m_particlespawner_ids.end()) - { - m_particlespawner_ids.push_back(id); - break; - } + // m_env will be NULL if the server is initializing + if (!m_env) + throw ServerError("Can't delete particle spawners during initialisation!"); + + u16 peer_id = PEER_ID_INEXISTENT; + if (playername != "") { + Player* player = m_env->getPlayer(playername.c_str()); + if (!player) + return; + peer_id = player->peer_id; } - SendAddParticleSpawner(PEER_ID_INEXISTENT, amount, spawntime, - minpos, maxpos, minvel, maxvel, minacc, maxacc, - minexptime, maxexptime, minsize, maxsize, - collisiondetection, vertical, texture, id); - - return id; -} - -void Server::deleteParticleSpawner(const char *playername, u32 id) -{ - Player *player = m_env->getPlayer(playername); - if(!player) - return; - m_particlespawner_ids.erase( std::remove(m_particlespawner_ids.begin(), m_particlespawner_ids.end(), id), m_particlespawner_ids.end()); - SendDeleteParticleSpawner(player->peer_id, id); -} - -void Server::deleteParticleSpawnerAll(u32 id) -{ - m_particlespawner_ids.erase( - std::remove(m_particlespawner_ids.begin(), - m_particlespawner_ids.end(), id), - m_particlespawner_ids.end()); - SendDeleteParticleSpawner(PEER_ID_INEXISTENT, id); + SendDeleteParticleSpawner(peer_id, id); } Inventory* Server::createDetachedInventory(const std::string &name) @@ -3130,24 +3107,6 @@ Inventory* Server::createDetachedInventory(const std::string &name) return inv; } -class BoolScopeSet -{ -public: - BoolScopeSet(bool *dst, bool val): - m_dst(dst) - { - m_orig_state = *m_dst; - *m_dst = val; - } - ~BoolScopeSet() - { - *m_dst = m_orig_state; - } -private: - bool *m_dst; - bool m_orig_state; -}; - // actions: time-reversed list // Return value: success/failure bool Server::rollbackRevertActions(const std::list &actions, @@ -3167,7 +3126,7 @@ bool Server::rollbackRevertActions(const std::list &actions, for(std::list::const_iterator i = actions.begin(); - i != actions.end(); i++) + i != actions.end(); ++i) { const RollbackAction &action = *i; num_tried++; @@ -3197,27 +3156,29 @@ bool Server::rollbackRevertActions(const std::list &actions, // IGameDef interface // Under envlock -IItemDefManager* Server::getItemDefManager() +IItemDefManager *Server::getItemDefManager() { return m_itemdef; } -INodeDefManager* Server::getNodeDefManager() + +INodeDefManager *Server::getNodeDefManager() { return m_nodedef; } -ICraftDefManager* Server::getCraftDefManager() + +ICraftDefManager *Server::getCraftDefManager() { return m_craftdef; } -ITextureSource* Server::getTextureSource() +ITextureSource *Server::getTextureSource() { return NULL; } -IShaderSource* Server::getShaderSource() +IShaderSource *Server::getShaderSource() { return NULL; } -scene::ISceneManager* Server::getSceneManager() +scene::ISceneManager *Server::getSceneManager() { return NULL; } @@ -3226,44 +3187,50 @@ u16 Server::allocateUnknownNodeId(const std::string &name) { return m_nodedef->allocateDummy(name); } -ISoundManager* Server::getSoundManager() + +ISoundManager *Server::getSoundManager() { return &dummySoundManager; } -MtEventManager* Server::getEventManager() + +MtEventManager *Server::getEventManager() { return m_event; } -IWritableItemDefManager* Server::getWritableItemDefManager() +IWritableItemDefManager *Server::getWritableItemDefManager() { return m_itemdef; } -IWritableNodeDefManager* Server::getWritableNodeDefManager() + +IWritableNodeDefManager *Server::getWritableNodeDefManager() { return m_nodedef; } -IWritableCraftDefManager* Server::getWritableCraftDefManager() + +IWritableCraftDefManager *Server::getWritableCraftDefManager() { return m_craftdef; } -const ModSpec* Server::getModSpec(const std::string &modname) const +const ModSpec *Server::getModSpec(const std::string &modname) const { - for(std::vector::const_iterator i = m_mods.begin(); - i != m_mods.end(); i++){ - const ModSpec &mod = *i; - if(mod.name == modname) + std::vector::const_iterator it; + for (it = m_mods.begin(); it != m_mods.end(); ++it) { + const ModSpec &mod = *it; + if (mod.name == modname) return &mod; } return NULL; } + void Server::getModNames(std::vector &modlist) { - for(std::vector::iterator i = m_mods.begin(); i != m_mods.end(); i++) { - modlist.push_back(i->name); - } + std::vector::iterator it; + for (it = m_mods.begin(); it != m_mods.end(); ++it) + modlist.push_back(it->name); } + std::string Server::getBuiltinLuaPath() { return porting::path_share + DIR_DELIM + "builtin"; @@ -3277,12 +3244,8 @@ v3f Server::findSpawnPos() return nodeposf * BS; } - // Default position is static_spawnpoint - // We will return it if we don't found a good place - v3s16 nodepos(nodeposf.X, nodeposf.Y, nodeposf.Z); - s16 water_level = map.getWaterLevel(); - + s16 vertical_spawn_range = g_settings->getS16("vertical_spawn_range"); bool is_good = false; // Try to find a good place a few times @@ -3295,12 +3258,12 @@ v3f Server::findSpawnPos() // Get ground height at point s16 groundheight = map.findGroundLevel(nodepos2d); - if (groundheight <= water_level) // Don't go underwater - continue; - if (groundheight > water_level + 6) // Don't go to high places + // Don't go underwater or to high places + if (groundheight <= water_level || + groundheight > water_level + vertical_spawn_range) continue; - nodepos = v3s16(nodepos2d.X, groundheight, nodepos2d.Y); + v3s16 nodepos(nodepos2d.X, groundheight, nodepos2d.Y); s32 air_count = 0; for (s32 i = 0; i < 10; i++) { @@ -3309,7 +3272,11 @@ v3f Server::findSpawnPos() content_t c = map.getNodeNoEx(nodepos).getContent(); if (c == CONTENT_AIR || c == CONTENT_IGNORE) { air_count++; - if (air_count >= 2){ + if (air_count >= 2) { + nodeposf = intToFloat(nodepos, BS); + // Don't spawn the player outside map boundaries + if (objectpos_over_limit(nodeposf)) + continue; is_good = true; break; } @@ -3318,10 +3285,10 @@ v3f Server::findSpawnPos() } } - return intToFloat(nodepos, BS); + return nodeposf; } -PlayerSAO* Server::emergePlayer(const char *name, u16 peer_id) +PlayerSAO* Server::emergePlayer(const char *name, u16 peer_id, u16 proto_version) { bool newplayer = false; @@ -3367,6 +3334,16 @@ PlayerSAO* Server::emergePlayer(const char *name, u16 peer_id) // Add player to environment m_env->addPlayer(player); + } else { + // If the player exists, ensure that they respawn inside legal bounds + // This fixes an assert crash when the player can't be added + // to the environment + if (objectpos_over_limit(player->getPosition())) { + actionstream << "Respawn position for player \"" + << name << "\" outside limits, resetting" << std::endl; + v3f pos = findSpawnPos(); + player->setPosition(pos); + } } // Create a new player active object @@ -3374,6 +3351,8 @@ PlayerSAO* Server::emergePlayer(const char *name, u16 peer_id) getPlayerEffectivePrivs(player->getName()), isSingleplayer()); + player->protocol_version = proto_version; + /* Clean up old HUD elements from previous sessions */ player->clearHud(); @@ -3390,7 +3369,7 @@ PlayerSAO* Server::emergePlayer(const char *name, u16 peer_id) void dedicated_server_loop(Server &server, bool &kill) { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); verbosestream<<"dedicated_server_loop()"< m_particlespawner_ids; + + DISABLE_CLASS_COPY(Server); }; /* Runs a simple dedicated server loop. - Shuts down when run is set to false. + Shuts down when kill is set to true. */ -void dedicated_server_loop(Server &server, bool &run); +void dedicated_server_loop(Server &server, bool &kill); #endif diff --git a/src/serverlist.cpp b/src/serverlist.cpp index ab52ceea..1e05c89b 100644 --- a/src/serverlist.cpp +++ b/src/serverlist.cpp @@ -165,7 +165,7 @@ const std::string serialize(const std::vector &serverlist) std::string liststring; for (std::vector::const_iterator it = serverlist.begin(); it != serverlist.end(); - it++) { + ++it) { liststring += "[server]\n"; liststring += (*it)["name"].asString() + '\n'; liststring += (*it)["address"].asString() + '\n'; @@ -182,7 +182,7 @@ const std::string serializeJson(const std::vector &serverlist) Json::Value list(Json::arrayValue); for (std::vector::const_iterator it = serverlist.begin(); it != serverlist.end(); - it++) { + ++it) { list.append(*it); } root["list"] = list; diff --git a/src/serverobject.cpp b/src/serverobject.cpp index e3da4bea..15455c71 100644 --- a/src/serverobject.cpp +++ b/src/serverobject.cpp @@ -52,7 +52,7 @@ ServerActiveObject* ServerActiveObject::create(ActiveObjectType type, } // If factory is not found, just return. - dstream<<"WARNING: ServerActiveObject: No factory for type=" + warningstream<<"ServerActiveObject: No factory for type=" < getAttachmentChildIds() + { return std::set(); } virtual ObjectProperties* accessObjectProperties() { return NULL; } virtual void notifyObjectPropertiesModified() diff --git a/src/settings.cpp b/src/settings.cpp index cf03d77b..6f1788f1 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -20,7 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "settings.h" #include "irrlichttypes_bloated.h" #include "exceptions.h" -#include "jthread/jmutexautolock.h" +#include "threading/mutex_auto_lock.h" #include "strfnd.h" #include #include @@ -56,8 +56,8 @@ Settings & Settings::operator = (const Settings &other) if (&other == this) return *this; - JMutexAutoLock lock(m_mutex); - JMutexAutoLock lock2(other.m_mutex); + MutexAutoLock lock(m_mutex); + MutexAutoLock lock2(other.m_mutex); clearNoLock(); updateNoLock(other); @@ -155,7 +155,7 @@ bool Settings::readConfigFile(const char *filename) bool Settings::parseConfigLines(std::istream &is, const std::string &end) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); std::string line, name, value; @@ -194,7 +194,7 @@ bool Settings::parseConfigLines(std::istream &is, const std::string &end) void Settings::writeLines(std::ostream &os, u32 tab_depth) const { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); for (std::map::const_iterator it = m_settings.begin(); @@ -298,7 +298,7 @@ bool Settings::updateConfigObject(std::istream &is, std::ostream &os, bool Settings::updateConfigFile(const char *filename) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); std::ifstream is(filename); std::ostringstream os(std::ios_base::binary); @@ -379,7 +379,7 @@ bool Settings::parseCommandLine(int argc, char *argv[], const SettingsEntry &Settings::getEntry(const std::string &name) const { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); std::map::const_iterator n; if ((n = m_settings.find(name)) == m_settings.end()) { @@ -562,7 +562,7 @@ bool Settings::getNoiseParamsFromGroup(const std::string &name, bool Settings::exists(const std::string &name) const { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); return (m_settings.find(name) != m_settings.end() || m_defaults.find(name) != m_defaults.end()); @@ -742,7 +742,7 @@ bool Settings::setEntry(const std::string &name, const void *data, return false; { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); SettingsEntry &entry = set_default ? m_defaults[name] : m_settings[name]; old_group = entry.group; @@ -878,7 +878,7 @@ bool Settings::setNoiseParams(const std::string &name, bool Settings::remove(const std::string &name) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); delete m_settings[name].group; return m_settings.erase(name); @@ -887,13 +887,13 @@ bool Settings::remove(const std::string &name) void Settings::clear() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); clearNoLock(); } void Settings::clearDefaults() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); clearDefaultsNoLock(); } @@ -902,7 +902,7 @@ void Settings::updateValue(const Settings &other, const std::string &name) if (&other == this) return; - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); try { std::string val = other.get(name); @@ -918,8 +918,8 @@ void Settings::update(const Settings &other) if (&other == this) return; - JMutexAutoLock lock(m_mutex); - JMutexAutoLock lock2(other.m_mutex); + MutexAutoLock lock(m_mutex); + MutexAutoLock lock2(other.m_mutex); updateNoLock(other); } @@ -982,13 +982,13 @@ void Settings::clearDefaultsNoLock() void Settings::registerChangedCallback(std::string name, setting_changed_callback cbf, void *userdata) { - JMutexAutoLock lock(m_callbackMutex); + MutexAutoLock lock(m_callbackMutex); m_callbacks[name].push_back(std::make_pair(cbf, userdata)); } void Settings::deregisterChangedCallback(std::string name, setting_changed_callback cbf, void *userdata) { - JMutexAutoLock lock(m_callbackMutex); + MutexAutoLock lock(m_callbackMutex); std::map > >::iterator iterToVector = m_callbacks.find(name); if (iterToVector != m_callbacks.end()) { @@ -1004,12 +1004,12 @@ void Settings::deregisterChangedCallback(std::string name, setting_changed_callb void Settings::doCallbacks(const std::string name) { - JMutexAutoLock lock(m_callbackMutex); + MutexAutoLock lock(m_callbackMutex); std::map > >::iterator iterToVector = m_callbacks.find(name); if (iterToVector != m_callbacks.end()) { std::vector >::iterator iter; - for (iter = iterToVector->second.begin(); iter != iterToVector->second.end(); iter++) + for (iter = iterToVector->second.begin(); iter != iterToVector->second.end(); ++iter) { (iter->first)(name, iter->second); } diff --git a/src/settings.h b/src/settings.h index e443998e..addf71ff 100644 --- a/src/settings.h +++ b/src/settings.h @@ -22,7 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "irrlichttypes_bloated.h" #include "util/string.h" -#include "jthread/jmutex.h" +#include "threading/mutex.h" #include #include #include @@ -36,7 +36,7 @@ extern Settings *g_settings; extern std::string g_settings_path; /** function type to register a changed callback */ -typedef void (*setting_changed_callback)(const std::string, void*); +typedef void (*setting_changed_callback)(const std::string &name, void *data); enum ValueType { VALUETYPE_STRING, @@ -225,8 +225,8 @@ private: std::map > > m_callbacks; - mutable JMutex m_callbackMutex; - mutable JMutex m_mutex; // All methods that access m_settings/m_defaults directly should lock this. + mutable Mutex m_callbackMutex; + mutable Mutex m_mutex; // All methods that access m_settings/m_defaults directly should lock this. }; diff --git a/src/settings_translation_file.cpp b/src/settings_translation_file.cpp new file mode 100644 index 00000000..bdeb1b82 --- /dev/null +++ b/src/settings_translation_file.cpp @@ -0,0 +1,511 @@ +// This file is automatically generated +// It conatins a bunch of fake gettext calls, to tell xgettext about the strings in config files +// To update it, refer to the bottom of builtin/mainmenu/tab_settings.lua + +fake_function() { + gettext("Client"); + gettext("Controls"); + gettext("Build inside player"); + gettext("If enabled, you can place blocks at the position (feet + eye level) where you stand.\nThis is helpful when working with nodeboxes in small areas."); + gettext("Flying"); + gettext("Player is able to fly without being affected by gravity.\nThis requires the \"fly\" privilege on the server."); + gettext("Fast movement"); + gettext("Fast movement (via use key).\nThis requires the \"fast\" privilege on the server."); + gettext("Noclip"); + gettext("If enabled together with fly mode, player is able to fly through solid nodes.\nThis requires the \"noclip\" privilege on the server."); + gettext("Cinematic mode"); + gettext("Smooths camera when moving and looking around.\nUseful for recording videos."); + gettext("Camera smoothing"); + gettext("Smooths rotation of camera. 0 to disable."); + gettext("Camera smoothing in cinematic mode"); + gettext("Smooths rotation of camera in cinematic mode. 0 to disable."); + gettext("Invert mouse"); + gettext("Invert vertical mouse movement."); + gettext("Mouse sensitivity"); + gettext("Mouse sensitivity multiplier."); + gettext("Key use for climbing/descending"); + gettext("If enabled, \"use\" key instead of \"sneak\" key is used for climbing down and descending."); + gettext("Double tap jump for fly"); + gettext("Double-tapping the jump key toggles fly mode."); + gettext("Always fly and fast"); + gettext("If disabled \"use\" key is used to fly fast if both fly and fast mode are enabled."); + gettext("Rightclick repetition interval"); + gettext("The time in seconds it takes between repeated right clicks when holding the right mouse button."); + gettext("Random input"); + gettext("Enable random user input (only used for testing)."); + gettext("Continuous forward"); + gettext("Continuous forward movement (only used for testing)."); + gettext("Forward key"); + gettext("Key for moving the player forward.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Backward key"); + gettext("Key for moving the player backward.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Left key"); + gettext("Key for moving the player left.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Right key"); + gettext("Key for moving the player right.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Jump key"); + gettext("Key for jumping.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Sneak key"); + gettext("Key for sneaking.\nAlso used for climbing down and descending in water if aux1_descends is disabled.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Inventory key"); + gettext("Key for opening the inventory.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Use key"); + gettext("Key for moving fast in fast mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Chat key"); + gettext("Key for opening the chat window.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Command key"); + gettext("Key for opening the chat window to type commands.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Console key"); + gettext("Key for opening the chat console.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Range select key"); + gettext("Key for toggling unlimited view range.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Fly key"); + gettext("Key for toggling flying.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Fast key"); + gettext("Key for toggling fast mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Noclip key"); + gettext("Key for toggling noclip mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Cinematic mode key"); + gettext("Key for toggling cinematic mode.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Minimap key"); + gettext("Key for toggling display of minimap.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Screenshot"); + gettext("Key for taking screenshots.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Drop item key"); + gettext("Key for dropping the currently selected item.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("HUD toggle key"); + gettext("Key for toggling the display of the HUD.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Chat toggle key"); + gettext("Key for toggling the display of the chat.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Fog toggle key"); + gettext("Key for toggling the display of the fog.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Camera update toggle key"); + gettext("Key for toggling the camrea update. Only used for development\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Debug info toggle key"); + gettext("Key for toggling the display of debug info.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Profiler toggle key"); + gettext("Key for toggling the display of the profiler. Used for development.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Toggle camera mode key"); + gettext("Key for switching between first- and third-person camera.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("View range increase key"); + gettext("Key for increasing the viewing range. Modifies the minimum viewing range.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("View range decrease key"); + gettext("Key for decreasing the viewing range. Modifies the minimum viewing range.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Print stacks"); + gettext("Key for printing debug stacks. Used for development.\nSee http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3"); + gettext("Network"); + gettext("Server address"); + gettext("Address to connect to.\nLeave this blank to start a local server.\nNote that the address field in the main menu overrides this setting."); + gettext("Remote port"); + gettext("Port to connect to (UDP).\nNote that the port field in the main menu overrides this setting."); + gettext("Saving map received from server"); + gettext("Save the map received by the client on disk."); + gettext("Connect to external media server"); + gettext("Enable usage of remote media server (if provided by server).\nRemote servers offer a significantly faster way to download media (e.g. textures)\nwhen connecting to the server."); + gettext("Serverlist URL"); + gettext("URL to the server list displayed in the Multiplayer Tab."); + gettext("Serverlist file"); + gettext("File in client/serverlist/ that contains your favorite servers displayed in the Multiplayer Tab."); + gettext("Graphics"); + gettext("In-Game"); + gettext("Basic"); + gettext("Fog"); + gettext("Whether to fog out the end of the visible area."); + gettext("New style water"); + gettext("Enable a bit lower water surface, so it doesn't \"fill\" the node completely.\nNote that this is not quite optimized and that smooth lighting on the\nwater surface doesn't work with this."); + gettext("Leaves style"); + gettext("Leaves style:\n- Fancy: all faces visible\n- Simple: only outer faces, if defined special_tiles are used\n- Opaque: disable transparency"); + gettext("Connect glass"); + gettext("Connects glass if supported by node."); + gettext("Smooth lighting"); + gettext("Enable smooth lighting with simple ambient occlusion.\nDisable for speed or for different looks."); + gettext("Clouds"); + gettext("Clouds are a client side effect."); + gettext("3D clouds"); + gettext("Use 3D cloud look instead of flat."); + gettext("Filtering"); + gettext("Mipmapping"); + gettext("Use mip mapping to scale textures. May slightly increase performance."); + gettext("Anisotropic filtering"); + gettext("Use anisotropic filtering when viewing at textures from an angle."); + gettext("Bilinear filtering"); + gettext("Use bilinear filtering when scaling textures."); + gettext("Trilinear filtering"); + gettext("Use trilinear filtering when scaling textures."); + gettext("Clean transparent textures"); + gettext("Filtered textures can blend RGB values with fully-transparent neighbors,\nwhich PNG optimizers usually discard, sometimes resulting in a dark or\nlight edge to transparent textures. Apply this filter to clean that up\nat texture load time."); + gettext("Minimum texture size for filters"); + gettext("When using bilinear/trilinear/anisotropic filters, low-resolution textures\ncan be blurred, so automatically upscale them with nearest-neighbor\ninterpolation to preserve crisp pixels. This sets the minimum texture size\nfor the upscaled textures; higher values look sharper, but require more\nmemory. Powers of 2 are recommended. Setting this higher than 1 may not\nhave a visible effect unless bilinear/trilinear/anisotropic filtering is\nenabled."); + gettext("Preload inventory textures"); + gettext("Pre-generate all item visuals used in the inventory.\nThis increases startup time, but runs smoother in-game.\nThe generated textures can easily exceed your VRAM, causing artifacts in the inventory."); + gettext("FSAA"); + gettext("Experimental option, might cause visible spaces between blocks\nwhen set to higher number than 0."); + gettext("Shaders"); + gettext("Shaders"); + gettext("Shaders allow advanced visul effects and may increase performance on some video cards.\nThy only work with the OpenGL video backend."); + gettext("Bumpmapping"); + gettext("Bumpmapping"); + gettext("Enables bumpmapping for textures. Normalmaps need to be supplied by the texture pack\nor need to be auto-generated.\nRequires shaders to be enabled."); + gettext("Generate normalmaps"); + gettext("Enables on the fly normalmap generation (Emboss effect).\nRequires bumpmapping to be enabled."); + gettext("Normalmaps strength"); + gettext("Strength of generated normalmaps."); + gettext("Normalmaps sampling"); + gettext("Defines sampling step of texture.\nA higher value results in smoother normal maps."); + gettext("Parallax Occlusion"); + gettext("Parallax occlusion"); + gettext("Enables parallax occlusion mapping.\nRequires shaders to be enabled."); + gettext("Parallax occlusion mode"); + gettext("0 = parallax occlusion with slope information (faster).\n1 = relief mapping (slower, more accurate)."); + gettext("Parallax occlusion strength"); + gettext("Strength of parallax."); + gettext("Parallax occlusion iterations"); + gettext("Number of parallax occlusion iterations."); + gettext("Parallax occlusion Scale"); + gettext("Overall scale of parallax occlusion effect."); + gettext("Parallax occlusion bias"); + gettext("Overall bias of parallax occlusion effect, usually scale/2."); + gettext("Waving Nodes"); + gettext("Waving water"); + gettext("Set to true enables waving water.\nRequires shaders to be enabled."); + gettext("Waving water height"); + gettext("Waving water length"); + gettext("Waving water speed"); + gettext("Waving leaves"); + gettext("Set to true enables waving leaves.\nRequires shaders to be enabled."); + gettext("Waving plants"); + gettext("Set to true enables waving plants.\nRequires shaders to be enabled."); + gettext("Advanced"); + gettext("Wanted FPS"); + gettext("Minimum wanted FPS.\nThe amount of rendered stuff is dynamically set according to this. and viewing range min and max."); + gettext("Maximum FPS"); + gettext("If FPS would go higher than this, limit it by sleeping\nto not waste CPU power for no benefit."); + gettext("FPS in pause menu"); + gettext("Maximum FPS when game is paused."); + gettext("Viewing range maximum"); + gettext("The allowed adjustment range for the automatic rendering range adjustment.\nSet this to be equal to viewing range minimum to disable the auto-adjustment algorithm."); + gettext("Viewing range minimum"); + gettext("The allowed adjustment range for the automatic rendering range adjustment.\nSet this to be equal to viewing range minimum to disable the auto-adjustment algorithm."); + gettext("Screen width"); + gettext("Vertical initial window size."); + gettext("Screen height"); + gettext("Horizontal initial window size."); + gettext("Full screen"); + gettext("Fullscreen mode."); + gettext("Full screen BPP"); + gettext("Bits per pixel (aka color depth) in fullscreen mode."); + gettext("V-Sync"); + gettext("Vertical screen synchronization."); + gettext("Field of view"); + gettext("Field of view in degrees."); + gettext("Gamma"); + gettext("Adjust the gamma encoding for the light tables. Lower numbers are brighter.\nThis setting is for the client only and is ignored by the server."); + gettext("Texture path"); + gettext("Path to texture directory. All textures are first searched from here."); + gettext("Video driver"); + gettext("The rendering back-end for Irrlicht."); + gettext("Cloud height"); + gettext("Height on which clouds are appearing."); + gettext("Cloud radius"); + gettext("Radius of cloud area stated in number of 64 node cloud squares.\nValues larger than 26 will start to produce sharp cutoffs at cloud area corners."); + gettext("View bobbing"); + gettext("Multiplier for view bobbing.\nFor example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."); + gettext("Fall bobbing"); + gettext("Multiplier for fall bobbing.\nFor example: 0 for no view bobbing; 1.0 for normal; 2.0 for double."); + gettext("3D mode"); + gettext("3D support.\nCurrently supported:\n- none: no 3d output.\n- anaglyph: cyan/magenta color 3d.\n- interlaced: odd/even line based polarisation screen support.\n- topbottom: split screen top/bottom.\n- sidebyside: split screen side by side."); + gettext("Console color"); + gettext("In-game chat console background color (R,G,B)."); + gettext("Console alpha"); + gettext("In-game chat console background alpha (opaqueness, between 0 and 255)."); + gettext("Selection box color"); + gettext("Selection box border color (R,G,B)."); + gettext("Selection box width"); + gettext("Width of the selectionbox's lines around nodes."); + gettext("Crosshair color"); + gettext("Crosshair color (R,G,B)."); + gettext("Crosshair alpha"); + gettext("Crosshair alpha (opaqueness, between 0 and 255)."); + gettext("Desynchronize block animation"); + gettext("Whether node texture animations should be desynchronized per mapblock."); + gettext("Maximum hotbar width"); + gettext("Maximum proportion of current window to be used for hotbar.\nUseful if there's something to be displayed right or left of hotbar."); + gettext("Node highlighting"); + gettext("Enable selection highlighting for nodes (disables selectionbox)."); + gettext("Mesh cache"); + gettext("Enables caching of facedir rotated meshes."); + gettext("Minimap"); + gettext("Enables minimap."); + gettext("Round minimap"); + gettext("Shape of the minimap. Enabled = round, disabled = square."); + gettext("Minimap scan height"); + gettext("True = 256\nFalse = 128\nUseable to make minimap smoother on slower machines."); + gettext("Colored fog"); + gettext("Make fog and sky colors depend on daytime (dawn/sunset) and view direction."); + gettext("Ambient occlusion gamma"); + gettext("The strength (darkness) of node ambient-occlusion shading.\nLower is darker, Higher is lighter. The valid range of values for this\nsetting is 0.25 to 4.0 inclusive. If the value is out of range it will be\nset to the nearest valid value."); + gettext("Menus"); + gettext("Clouds in menu"); + gettext("Use a cloud animation for the main menu background."); + gettext("GUI scaling"); + gettext("Scale gui by a user specified value.\nUse a nearest-neighbor-anti-alias filter to scale the GUI.\nThis will smooth over some of the rough edges, and blend\npixels when scaling down, at the cost of blurring some\nedge pixels when images are scaled by non-integer sizes."); + gettext("GUI scaling filter"); + gettext("When gui_scaling_filter is true, all GUI images need to be\nfiltered in software, but some images are generated directly\nto hardware (e.g. render-to-texture for nodes in inventory)."); + gettext("GUI scaling filter txr2img"); + gettext("When gui_scaling_filter_txr2img is true, copy those images\nfrom hardware to software for scaling. When false, fall back\nto the old scaling method, for video drivers that don't\npropery support downloading textures back from hardware."); + gettext("Tooltip delay"); + gettext("Delay showing tooltips, stated in milliseconds."); + gettext("Freetype fonts"); + gettext("Whether freetype fonts are used, requires freetype support to be compiled in."); + gettext("Font path"); + gettext("Path to TrueTypeFont or bitmap."); + gettext("Font size"); + gettext("Font shadow"); + gettext("Font shadow offset, if 0 then shadow will not be drawn."); + gettext("Font shadow alpha"); + gettext("Font shadow alpha (opaqueness, between 0 and 255)."); + gettext("Monospace font path"); + gettext("Monospace font size"); + gettext("Fallback font"); + gettext("This font will be used for certain languages."); + gettext("Fallback font size"); + gettext("Fallback font shadow"); + gettext("Fallback font shadow alpha"); + gettext("Screenshot folder"); + gettext("Path to save screenshots at."); + gettext("Advanced"); + gettext("DPI"); + gettext("Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens."); + gettext("Sound"); + gettext("Sound"); + gettext("Volume"); + gettext("Advanced"); + gettext("Mapblock unload timeout"); + gettext("Timeout for client to remove unused map data from memory."); + gettext("Mapblock limit"); + gettext("Maximum number of mapblocks for client to be kept in memory.\nSet to -1 for unlimited amount."); + gettext("Show debug info"); + gettext("Whether to show the client debug info (has the same effect as hitting F5)."); + gettext("Server / Singleplayer"); + gettext("Server name"); + gettext("Name of the server, to be displayed when players join and in the serverlist."); + gettext("Server description"); + gettext("Description of server, to be displayed when players join and in the serverlist."); + gettext("Server address"); + gettext("Domain name of server, to be displayed in the serverlist."); + gettext("Server URL"); + gettext("Homepage of server, to be displayed in the serverlist."); + gettext("Announce server"); + gettext("Automaticaly report to the serverlist."); + gettext("Serverlist URL"); + gettext("Announce to this serverlist.\nIf you want to announce your ipv6 address, use serverlist_url = v6.servers.minetest.net."); + gettext("Network"); + gettext("Server port"); + gettext("Network port to listen (UDP).\nThis value will be overridden when starting from the main menu."); + gettext("Bind address"); + gettext("The network interface that the server listens on."); + gettext("Strict protocol checking"); + gettext("Enable to disallow old clients from connecting.\nOlder clients are compatible in the sense that they will not crash when connecting\nto new servers, but they may not support all new features that you are expecting."); + gettext("Remote media"); + gettext("Specifies URL from which client fetches media instead of using UDP.\n$filename should be accessible from $remote_media$filename via cURL\n(obviously, remote_media should end with a slash).\nFiles that are not present will be fetched the usual way."); + gettext("IPv6 server"); + gettext("Enable/disable running an IPv6 server. An IPv6 server may be restricted\nto IPv6 clients, depending on system configuration.\nIgnored if bind_address is set."); + gettext("Advanced"); + gettext("Maximum simultaneously blocks send per client"); + gettext("How many blocks are flying in the wire simultaneously per client."); + gettext("Maximum simultaneously bocks send total"); + gettext("How many blocks are flying in the wire simultaneously for the whole server."); + gettext("To reduce lag, block transfers are slowed down when a player is building something.\nThis determines how long they are slowed down after placing or removing a node."); + gettext("Max. packets per iteration"); + gettext("Maximum number of packets sent per send step, if you have a slow connection\ntry reducing it, but don't reduce it to a number below double of targeted\nclient number."); + gettext("Game"); + gettext("Default game"); + gettext("Default game when creating a new world.\nThis will be overridden when creating a world from the main menu."); + gettext("Message of the day"); + gettext("Message of the day displayed to players connecting."); + gettext("Maximum users"); + gettext("Maximum number of players that can connect simultaneously."); + gettext("Map directory"); + gettext("World directory (everything in the world is stored here).\nNot needed if starting from the main menu."); + gettext("Item entity TTL"); + gettext("Time in seconds for item entity (dropped items) to live.\nSetting it to -1 disables the feature."); + gettext("Damage"); + gettext("Enable players getting damage and dying."); + gettext("Fixed map seed"); + gettext("A chosen map seed for a new map, leave empty for random.\nWill be overridden when creating a new world in the main menu."); + gettext("Default password"); + gettext("New users need to input this password."); + gettext("Default privileges"); + gettext("The privileges that new users automatically get.\nSee /privs in game for a full list on your server and mod configuration."); + gettext("Unlimited player transfer distance"); + gettext("Whether players are shown to clients without any range limit.\nDeprecated, use the setting player_transfer_distance instead."); + gettext("Player transfer distance"); + gettext("Defines the maximal player transfer distance in blocks (0 = unlimited)."); + gettext("Player versus Player"); + gettext("Whether to allow players to damage and kill each other."); + gettext("Static spawnpoint"); + gettext("If this is set, players will always (re)spawn at the given position."); + gettext("Disallow empty passwords"); + gettext("If enabled, new players cannot join with an empty password."); + gettext("Disable anticheat"); + gettext("If enabled, disable cheat prevention in multiplayer."); + gettext("Rollback recording"); + gettext("If enabled, actions are recorded for rollback.\nThis option is only read when server starts."); + gettext("Shutdown message"); + gettext("A message to be displayed to all clients when the server shuts down."); + gettext("Crash message"); + gettext("A message to be displayed to all clients when the server crashes."); + gettext("Ask to reconnect after crash"); + gettext("Whether to ask clients to reconnect after a (Lua) crash.\nSet this to true if your server is set up to restart automatically."); + gettext("Active object send range"); + gettext("From how far clients know about objects, stated in mapblocks (16 nodes)."); + gettext("Active block range"); + gettext("How large area of blocks are subject to the active block stuff, stated in mapblocks (16 nodes).\nIn active blocks objects are loaded and ABMs run."); + gettext("Max block send distance"); + gettext("From how far blocks are sent to clients, stated in mapblocks (16 nodes)."); + gettext("Maximum forceloaded blocks"); + gettext("Maximum number of forceloaded mapblocks."); + gettext("Time send interval"); + gettext("Interval of sending time of day to clients."); + gettext("Time speed"); + gettext("Controls length of day/night cycle.\nExamples: 72 = 20min, 360 = 4min, 1 = 24hour, 0 = day/night/whatever stays unchanged."); + gettext("Map save interval"); + gettext("Interval of saving important changes in the world, stated in seconds."); + gettext("Physics"); + gettext("Default acceleration"); + gettext("Acceleration in air"); + gettext("Fast mode acceleration"); + gettext("Walking speed"); + gettext("Crouch speed"); + gettext("Fast mode speed"); + gettext("Climbing speed"); + gettext("Jumping speed"); + gettext("Descending speed"); + gettext("Liquid fluidity"); + gettext("Liquid fluidity smoothing"); + gettext("Liquid sink"); + gettext("Gravity"); + gettext("Advanced"); + gettext("Deprecated Lua API handling"); + gettext("Handling for deprecated lua api calls:\n- legacy: (try to) mimic old behaviour (default for release).\n- log: mimic and log backtrace of deprecated call (default for debug).\n- error: abort on usage of deprecated call (suggested for mod developers)."); + gettext("Mod profiling"); + gettext("Useful for mod developers."); + gettext("Detailed mod profiling"); + gettext("Detailed mod profile data. Useful for mod developers."); + gettext("Profiling print interval"); + gettext("Profiler data print interval. 0 = disable. Useful for developers."); + gettext("Max. clearobjects extra blocks"); + gettext("Number of extra blocks that can be loaded by /clearobjects at once.\nThis is a trade-off between sqlite transaction overhead and\nmemory consumption (4096=100MB, as a rule of thumb)."); + gettext("Unload unused server data"); + gettext("How much the server will wait before unloading unused mapblocks.\nHigher value is smoother, but will use more RAM."); + gettext("Maxmimum objects per block"); + gettext("Maximum number of statically stored objects in a block."); + gettext("Synchronous SQLite"); + gettext("See http://www.sqlite.org/pragma.html#pragma_synchronous"); + gettext("Dedicated server step"); + gettext("Length of a server tick and the interval at which objects are generally updated over network."); + gettext("Ignore world errors"); + gettext("If enabled, invalid world data won't cause the server to shut down.\nOnly enable this if you know what you are doing."); + gettext("Liquid loop max"); + gettext("Max liquids processed per step."); + gettext("Liquid queue purge time"); + gettext("The time (in seconds) that the liquids queue may grow beyond processing\ncapacity until an attempt is made to decrease its size by dumping old queue\nitems. A value of 0 disables the functionality."); + gettext("Liquid update tick"); + gettext("Liquid update interval in seconds."); + gettext("Mapgen"); + gettext("Mapgen name"); + gettext("Name of map generator to be used when creating a new world.\nCreating a world in the main menu will override this."); + gettext("Water level"); + gettext("Water surface level of the world."); + gettext("Max block generate distance"); + gettext("From how far blocks are generated for clients, stated in mapblocks (16 nodes)."); + gettext("Map generation limit"); + gettext("Where the map generator stops.\nPlease note:\n- Limited to 31000 (setting above has no effect)\n- The map generator works in groups of 80x80x80 nodes (5x5x5 MapBlocks).\n- Those groups have an offset of -32, -32 nodes from the origin.\n- Only groups which are within the map_generation_limit are generated"); + gettext("Mapgen flags"); + gettext("Global map generation attributes.\nFlags that are not specified in the flag string are not modified from the default.\nFlags starting with \"no\" are used to explicitly disable them.\n'trees' and 'flat' flags only have effect in mgv6."); + gettext("Advanced"); + gettext("Chunk size"); + gettext("Size of chunks to be generated at once by mapgen, stated in mapblocks (16 nodes)."); + gettext("Mapgen debug"); + gettext("Dump the mapgen debug infos."); + gettext("Absolute limit of emerge queues"); + gettext("Maximum number of blocks that can be queued for loading."); + gettext("Limit of emerge queues on disk"); + gettext("Maximum number of blocks to be queued that are to be loaded from file.\nSet to blank for an appropriate amount to be chosen automatically."); + gettext("Limit of emerge queues to generate"); + gettext("Maximum number of blocks to be queued that are to be generated.\nSet to blank for an appropriate amount to be chosen automatically."); + gettext("Number of emerge threads"); + gettext("Number of emerge threads to use. Make this field blank, or increase this number\nto use multiple threads. On multiprocessor systems, this will improve mapgen speed greatly\nat the cost of slightly buggy caves."); + gettext("Mapgen biome heat noise parameters"); + gettext("Noise parameters for biome API temperature, humidity and biome blend."); + gettext("Mapgen heat blend noise parameters"); + gettext("Mapgen biome humidity noise parameters"); + gettext("Mapgen biome humidity blend noise parameters"); + gettext("Mapgen v5"); + gettext("Mapgen v5 filler depth noise parameters"); + gettext("Mapgen v5 factor noise parameters"); + gettext("Mapgen v5 height noise parameters"); + gettext("Mapgen v5 cave1 noise parameters"); + gettext("Mapgen v5 cave2 noise parameters"); + gettext("Mapgen v6"); + gettext("Mapgen v6 flags"); + gettext("Map generation attributes specific to Mapgen V6.\nWhen snowbiomes are enabled jungles are enabled and the jungles flag is ignored.\nFlags that are not specified in the flag string are not modified from the default.\nFlags starting with \"no\" are used to explicitly disable them."); + gettext("Mapgen v6 desert frequency"); + gettext("Controls size of deserts and beaches in Mapgen V6.\nWhen snowbiomes are enabled 'mgv6_freq_desert' is ignored."); + gettext("Mapgen v6 beach frequency"); + gettext("Mapgen v6 terrain base noise parameters"); + gettext("Mapgen v6 terrain altitude noise parameters"); + gettext("Mapgen v6 steepness noise parameters"); + gettext("Mapgen v6 height select noise parameters"); + gettext("Mapgen v6 mud noise parameters"); + gettext("Mapgen v6 beach noise parameters"); + gettext("Mapgen v6 biome noise parameters"); + gettext("Mapgen v6 cave noise parameters"); + gettext("Mapgen v6 humidity noise parameters"); + gettext("Mapgen v6 trees noise parameters"); + gettext("Mapgen v6 apple trees noise parameters"); + gettext("Mapgen v7"); + gettext("Mapgen v7 flags"); + gettext("Map generation attributes specific to Mapgen V7.\n'ridges' are the rivers.\nFlags that are not specified in the flag string are not modified from the default.\nFlags starting with \"no\" are used to explicitly disable them."); + gettext("Mapgen v7 terrain base noise parameters"); + gettext("Mapgen v7 terrain altitude noise parameters"); + gettext("Mapgen v7 terrain persistation noise parameters"); + gettext("Mapgen v7 height select noise parameters"); + gettext("Mapgen v7 filler depth noise parameters"); + gettext("Mapgen v7 mount height noise parameters"); + gettext("Mapgen v7 ridge water noise parameters"); + gettext("Mapgen v7 mountain noise parameters"); + gettext("Mapgen v7 ridge noise parameters"); + gettext("Mapgen v7 cave1 noise parameters"); + gettext("Mapgen v7 cave2 noise parameters"); + gettext("Security"); + gettext("Enable mod security"); + gettext("Prevent mods from doing insecure things like running shell commands."); + gettext("Trusted mods"); + gettext("Comma-separated list of trusted mods that are allowed to access insecure\nfunctions even when mod security is on (via request_insecure_environment())."); + gettext("Client and Server"); + gettext("Player name"); + gettext("Name of the player.\nWhen running a server, clients connecting with this name are admins.\nWhen starting from the main menu, this is overridden."); + gettext("Language"); + gettext("Set the language. Leave empty to use the system language.\nA restart is required after changing this."); + gettext("Debug log level"); + gettext("Level of logging to be written to debug.txt:\n- (no logging)\n- none (messages with no level)\n- error\n- warning\n- action\n- info\n- verbose"); + gettext("IPv6"); + gettext("IPv6 support."); + gettext("Advanced"); + gettext("cURL timeout"); + gettext("Default timeout for cURL, stated in milliseconds.\nOnly has an effect if compiled with cURL."); + gettext("cURL parallel limit"); + gettext("Limits number of parallel HTTP requests. Affects:\n- Media fetch if server uses remote_media setting.\n- Serverlist download and server announcement.\n- Downloads performed by main menu (e.g. mod manager).\nOnly has an effect if compiled with cURL."); + gettext("cURL file download timeout"); + gettext("Maximum time in ms a file download (e.g. a mod download) may take."); + gettext("High-precision FPU"); + gettext("Makes DirectX work with LuaJIT. Disable if it causes troubles."); + gettext("Main menu script"); + gettext("Replaces the default main menu with a custom one."); + gettext("Main menu game manager"); + gettext("Main menu mod manager"); + gettext("Modstore download URL"); + gettext("Modstore mods list URL"); + gettext("Modstore details URL"); +} diff --git a/src/shader.cpp b/src/shader.cpp index d3abdb60..c7239107 100644 --- a/src/shader.cpp +++ b/src/shader.cpp @@ -328,7 +328,7 @@ private: // The first position contains a dummy shader. std::vector m_shaderinfo_cache; // The former container is behind this mutex - JMutex m_shaderinfo_cache_mutex; + Mutex m_shaderinfo_cache_mutex; // Queued shader fetches (to be processed by the main thread) RequestQueue m_get_shader_queue; @@ -367,7 +367,7 @@ ShaderSource::ShaderSource(IrrlichtDevice *device): m_shader_callback = new ShaderCallback(this, "default"); - m_main_thread = get_current_thread_id(); + m_main_thread = thr_get_current_thread_id(); // Add a dummy ShaderInfo as the first index, named "" m_shaderinfo_cache.push_back(ShaderInfo()); @@ -379,7 +379,7 @@ ShaderSource::ShaderSource(IrrlichtDevice *device): ShaderSource::~ShaderSource() { for (std::vector::iterator iter = m_global_setters.begin(); - iter != m_global_setters.end(); iter++) { + iter != m_global_setters.end(); ++iter) { delete *iter; } m_global_setters.clear(); @@ -397,7 +397,7 @@ u32 ShaderSource::getShader(const std::string &name, Get shader */ - if(get_current_thread_id() == m_main_thread){ + if (thr_is_current_thread(m_main_thread)) { return getShaderIdDirect(name, material_type, drawtype); } else { /*errorstream<<"getShader(): Queued: name=\""<= m_shaderinfo_cache.size()) return ShaderInfo(); @@ -504,14 +504,14 @@ void ShaderSource::insertSourceShader(const std::string &name_of_shader, "name_of_shader=\""<getBool("generate_normalmaps")){ - shaders_header += "#define GENERATE_NORMALMAPS\n"; - shaders_header += "#define NORMALMAPS_STRENGTH "; - shaders_header += ftos(g_settings->getFloat("normalmaps_strength")); - shaders_header += "\n"; - float sample_step; - int smooth = (int)g_settings->getFloat("normalmaps_smooth"); - switch (smooth){ - case 0: - sample_step = 0.0078125; // 1.0 / 128.0 - break; - case 1: - sample_step = 0.00390625; // 1.0 / 256.0 - break; - case 2: - sample_step = 0.001953125; // 1.0 / 512.0 - break; - default: - sample_step = 0.0078125; - break; - } - shaders_header += "#define SAMPLE_STEP "; - shaders_header += ftos(sample_step); - shaders_header += "\n"; + if (g_settings->getBool("generate_normalmaps")) { + shaders_header += "#define GENERATE_NORMALMAPS 1\n"; + } else { + shaders_header += "#define GENERATE_NORMALMAPS 0\n"; } + shaders_header += "#define NORMALMAPS_STRENGTH "; + shaders_header += ftos(g_settings->getFloat("normalmaps_strength")); + shaders_header += "\n"; + float sample_step; + int smooth = (int)g_settings->getFloat("normalmaps_smooth"); + switch (smooth){ + case 0: + sample_step = 0.0078125; // 1.0 / 128.0 + break; + case 1: + sample_step = 0.00390625; // 1.0 / 256.0 + break; + case 2: + sample_step = 0.001953125; // 1.0 / 512.0 + break; + default: + sample_step = 0.0078125; + break; + } + shaders_header += "#define SAMPLE_STEP "; + shaders_header += ftos(sample_step); + shaders_header += "\n"; if (g_settings->getBool("enable_bumpmapping")) shaders_header += "#define ENABLE_BUMPMAPPING\n"; if (g_settings->getBool("enable_parallax_occlusion")){ + int mode = g_settings->getFloat("parallax_occlusion_mode"); + float scale = g_settings->getFloat("parallax_occlusion_scale"); + float bias = g_settings->getFloat("parallax_occlusion_bias"); + int iterations = g_settings->getFloat("parallax_occlusion_iterations"); shaders_header += "#define ENABLE_PARALLAX_OCCLUSION\n"; + shaders_header += "#define PARALLAX_OCCLUSION_MODE "; + shaders_header += itos(mode); + shaders_header += "\n"; shaders_header += "#define PARALLAX_OCCLUSION_SCALE "; - shaders_header += ftos(g_settings->getFloat("parallax_occlusion_scale")); + shaders_header += ftos(scale); shaders_header += "\n"; shaders_header += "#define PARALLAX_OCCLUSION_BIAS "; - shaders_header += ftos(g_settings->getFloat("parallax_occlusion_bias")); + shaders_header += ftos(bias); + shaders_header += "\n"; + shaders_header += "#define PARALLAX_OCCLUSION_ITERATIONS "; + shaders_header += itos(iterations); shaders_header += "\n"; } + shaders_header += "#define USE_NORMALMAPS "; if (g_settings->getBool("enable_bumpmapping") || g_settings->getBool("enable_parallax_occlusion")) - shaders_header += "#define USE_NORMALMAPS\n"; + shaders_header += "1\n"; + else + shaders_header += "0\n"; if (g_settings->getBool("enable_waving_water")){ shaders_header += "#define ENABLE_WAVING_WATER 1\n"; @@ -755,7 +770,6 @@ ShaderInfo generate_shader(std::string name, u8 material_type, u8 drawtype, vertex_program = shaders_header + vertex_program; if(geometry_program != "") geometry_program = shaders_header + geometry_program; - // Call addHighLevelShaderMaterial() or addShaderMaterial() const c8* vertex_program_ptr = 0; const c8* pixel_program_ptr = 0; diff --git a/src/socket.cpp b/src/socket.cpp index 3fadf604..3989310d 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -571,9 +571,8 @@ bool UDPSocket::WaitData(int timeout_ms) int e = WSAGetLastError(); dstream << (int) m_handle << ": WSAGetLastError()=" << e << std::endl; - if(e == 10004 /* = WSAEINTR */ || e == 10009 /*WSAEBADF*/) - { - dstream << "WARNING: Ignoring WSAEINTR/WSAEBADF." << std::endl; + if (e == 10004 /* WSAEINTR */ || e == 10009 /* WSAEBADF */) { + infostream << "Ignoring WSAEINTR/WSAEBADF." << std::endl; return false; } #endif diff --git a/src/sound_openal.cpp b/src/sound_openal.cpp index f84631b3..be1ed577 100644 --- a/src/sound_openal.cpp +++ b/src/sound_openal.cpp @@ -92,7 +92,7 @@ static ALenum warn_if_error(ALenum err, const char *desc) { if(err == AL_NO_ERROR) return err; - errorstream<<"WARNING: "< >::iterator i = m_buffers.begin(); - i != m_buffers.end(); i++) { + i != m_buffers.end(); ++i) { for (std::vector::iterator iter = (*i).second.begin(); - iter != (*i).second.end(); iter++) { + iter != (*i).second.end(); ++iter) { delete *iter; } (*i).second.clear(); @@ -402,11 +402,11 @@ public: std::set datas; m_fetcher->fetchSounds(name, paths, datas); for(std::set::iterator i = paths.begin(); - i != paths.end(); i++){ + i != paths.end(); ++i){ loadSoundFile(name, *i); } for(std::set::iterator i = datas.begin(); - i != datas.end(); i++){ + i != datas.end(); ++i){ loadSoundData(name, *i); } return getBuffer(name); @@ -421,7 +421,7 @@ public: std::set del_list; for(std::map::iterator i = m_sounds_playing.begin(); - i != m_sounds_playing.end(); i++) + i != m_sounds_playing.end(); ++i) { int id = i->first; PlayingSound *sound = i->second; @@ -438,7 +438,7 @@ public: verbosestream<<"OpenALSoundManager::maintain(): deleting " <::iterator i = del_list.begin(); - i != del_list.end(); i++) + i != del_list.end(); ++i) { deleteSound(*i); } diff --git a/src/staticobject.cpp b/src/staticobject.cpp index 801d1e8f..6b355ee8 100644 --- a/src/staticobject.cpp +++ b/src/staticobject.cpp @@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "staticobject.h" #include "util/serialize.h" +#include "log.h" void StaticObject::serialize(std::ostream &os) { @@ -44,9 +45,20 @@ void StaticObjectList::serialize(std::ostream &os) // version u8 version = 0; writeU8(os, version); + // count - u16 count = m_stored.size() + m_active.size(); + size_t count = m_stored.size() + m_active.size(); + // Make sure it fits into u16, else it would get truncated and cause e.g. + // issue #2610 (Invalid block data in database: unsupported NameIdMapping version). + if (count > U16_MAX) { + errorstream << "StaticObjectList::serialize(): " + << "too many objects (" << count << ") in list, " + << "not writing them to disk." << std::endl; + writeU16(os, 0); // count = 0 + return; + } writeU16(os, count); + for(std::vector::iterator i = m_stored.begin(); i != m_stored.end(); ++i) { diff --git a/src/staticobject.h b/src/staticobject.h index 13e04cd8..b6017c50 100644 --- a/src/staticobject.h +++ b/src/staticobject.h @@ -79,7 +79,7 @@ public: assert(id != 0); // Pre-condition if(m_active.find(id) == m_active.end()) { - dstream<<"WARNING: StaticObjectList::remove(): id="< find_paths; - Strfnd search_paths = getSubgamePathEnv(); + Strfnd search_paths(getSubgamePathEnv()); - while(!search_paths.atend()) { - std::string path = search_paths.next(":"); + while (!search_paths.atend()) { + std::string path = search_paths.next(PATH_DELIM); find_paths.push_back(GameFindPath( path + DIR_DELIM + id, false)); find_paths.push_back(GameFindPath( @@ -156,14 +151,13 @@ std::set getAvailableGameIds() gamespaths.insert(porting::path_share + DIR_DELIM + "games"); gamespaths.insert(porting::path_user + DIR_DELIM + "games"); - Strfnd search_paths = getSubgamePathEnv(); + Strfnd search_paths(getSubgamePathEnv()); - while(!search_paths.atend()) { - gamespaths.insert(search_paths.next(":")); - } + while (!search_paths.atend()) + gamespaths.insert(search_paths.next(PATH_DELIM)); - for(std::set::const_iterator i = gamespaths.begin(); - i != gamespaths.end(); i++){ + for (std::set::const_iterator i = gamespaths.begin(); + i != gamespaths.end(); ++i){ std::vector dirlist = fs::GetDirListing(*i); for(u32 j=0; j getAvailableGames() std::vector specs; std::set gameids = getAvailableGameIds(); for(std::set::const_iterator i = gameids.begin(); - i != gameids.end(); i++) + i != gameids.end(); ++i) specs.push_back(findSubgame(*i)); return specs; } @@ -223,15 +217,27 @@ std::string getWorldGameId(const std::string &world_path, bool can_be_legacy) return conf.get("gameid"); } +std::string getWorldPathEnv() +{ + char *world_path = getenv("MINETEST_WORLD_PATH"); + return world_path ? std::string(world_path) : ""; +} + std::vector getAvailableWorlds() { std::vector worlds; std::set worldspaths; + + Strfnd search_paths(getWorldPathEnv()); + + while (!search_paths.atend()) + worldspaths.insert(search_paths.next(PATH_DELIM)); + worldspaths.insert(porting::path_user + DIR_DELIM + "worlds"); - infostream<<"Searching worlds..."<::const_iterator i = worldspaths.begin(); - i != worldspaths.end(); i++){ - infostream<<" In "<<(*i)<<": "<::const_iterator i = worldspaths.begin(); + i != worldspaths.end(); ++i) { + infostream << " In " << (*i) << ": " < dirvector = fs::GetDirListing(*i); for(u32 j=0; j + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 3.0 of the License, or +(at your option) any later version. + +This program 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 Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef THREADING_ATOMIC_H +#define THREADING_ATOMIC_H + + +#if __cplusplus >= 201103L + #include + template using Atomic = std::atomic; +#else + +#define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) +#define CLANG_VERSION (__clang_major__ * 100 + __clang_minor__) +#if GCC_VERSION >= 407 || CLANG_VERSION >= 302 + #define ATOMIC_LOAD(T, v) return __atomic_load_n(&(v), __ATOMIC_SEQ_CST) + #define ATOMIC_STORE(T, v, x) __atomic_store (&(v), &(x), __ATOMIC_SEQ_CST); return x + #define ATOMIC_ADD_EQ(T, v, x) return __atomic_add_fetch(&(v), (x), __ATOMIC_SEQ_CST) + #define ATOMIC_SUB_EQ(T, v, x) return __atomic_sub_fetch(&(v), (x), __ATOMIC_SEQ_CST) + #define ATOMIC_POST_INC(T, v) return __atomic_fetch_add(&(v), 1, __ATOMIC_SEQ_CST) + #define ATOMIC_POST_DEC(T, v) return __atomic_fetch_sub(&(v), 1, __ATOMIC_SEQ_CST) +#else + #define ATOMIC_USE_LOCK + #include "threading/mutex.h" + + #define ATOMIC_LOCK_OP(T, op) do { \ + mutex.lock(); \ + T _val = (op); \ + mutex.unlock(); \ + return _val; \ + } while (0) + #define ATOMIC_LOAD(T, v) \ + if (sizeof(T) <= sizeof(void*)) return v; \ + else ATOMIC_LOCK_OP(T, v); + #define ATOMIC_STORE(T, v, x) \ + if (sizeof(T) <= sizeof(void*)) return v = x; \ + else ATOMIC_LOCK_OP(T, v = x); +# if GCC_VERSION >= 401 + #define ATOMIC_ADD_EQ(T, v, x) return __sync_add_and_fetch(&(v), (x)) + #define ATOMIC_SUB_EQ(T, v, x) return __sync_sub_and_fetch(&(v), (x)) + #define ATOMIC_POST_INC(T, v) return __sync_fetch_and_add(&(v), 1) + #define ATOMIC_POST_DEC(T, v) return __sync_fetch_and_sub(&(v), 1) +# else + #define ATOMIC_ADD_EQ(T, v, x) ATOMIC_LOCK_OP(T, v += x) + #define ATOMIC_SUB_EQ(T, v, x) ATOMIC_LOCK_OP(T, v -= x) + #define ATOMIC_POST_INC(T, v) ATOMIC_LOCK_OP(T, v++) + #define ATOMIC_POST_DEC(T, v) ATOMIC_LOCK_OP(T, v--) +# endif +#endif + + +template +class Atomic +{ + // Like C++11 std::enable_if, but defaults to char since C++03 doesn't support SFINAE + template struct enable_if { typedef char type; }; + template struct enable_if { typedef T_ type; }; +public: + Atomic(const T &v=0) : val(v) {} + + operator T () { ATOMIC_LOAD(T, val); } + T operator = (T x) { ATOMIC_STORE(T, val, x); } + T operator += (T x) { ATOMIC_ADD_EQ(T, val, x); } + T operator -= (T x) { ATOMIC_SUB_EQ(T, val, x); } + T operator ++ () { return *this += 1; } + T operator -- () { return *this -= 1; } + T operator ++ (int) { ATOMIC_POST_INC(T, val); } + T operator -- (int) { ATOMIC_POST_DEC(T, val); } + +private: + volatile T val; +#ifdef ATOMIC_USE_LOCK + typename enable_if::type mutex; +#endif +}; + +#endif // C++11 + +#endif + diff --git a/src/threading/event.h b/src/threading/event.h new file mode 100644 index 00000000..0105630e --- /dev/null +++ b/src/threading/event.h @@ -0,0 +1,57 @@ +/* +This file is a part of the JThread package, which contains some object- +oriented thread wrappers for different thread implementations. + +Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + +#ifndef THREADING_EVENT_H +#define THREADING_EVENT_H + +#ifdef _WIN32 + #include +#else + #include "threading/semaphore.h" +#endif + + +class Event { +public: +#ifdef _WIN32 + Event() { event = CreateEvent(NULL, false, false, NULL); } + ~Event() { CloseHandle(event); } + void wait() { WaitForSingleObject(event, INFINITE); } + void signal() { SetEvent(event); } +#else + void wait() { sem.wait(); } + void signal() { sem.post(); } +#endif + +private: +#ifdef _WIN32 + HANDLE event; +#else + Semaphore sem; +#endif +}; + +#endif + diff --git a/src/threading/mutex.cpp b/src/threading/mutex.cpp new file mode 100644 index 00000000..eb1c7d61 --- /dev/null +++ b/src/threading/mutex.cpp @@ -0,0 +1,83 @@ +/* +This file is a part of the JThread package, which contains some object- +oriented thread wrappers for different thread implementations. + +Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + +// Windows std::mutex is much slower than the critical section API +#if __cplusplus < 201103L || defined(_WIN32) + +#include "threading/mutex.h" + +#ifndef _WIN32 + #include +#endif + +#define UNUSED(expr) do { (void)(expr); } while (0) + + +Mutex::Mutex() +{ +#ifdef _WIN32 + InitializeCriticalSection(&mutex); +#else + int ret = pthread_mutex_init(&mutex, NULL); + assert(!ret); + UNUSED(ret); +#endif +} + +Mutex::~Mutex() +{ +#ifdef _WIN32 + DeleteCriticalSection(&mutex); +#else + int ret = pthread_mutex_destroy(&mutex); + assert(!ret); + UNUSED(ret); +#endif +} + +void Mutex::lock() +{ +#ifdef _WIN32 + EnterCriticalSection(&mutex); +#else + int ret = pthread_mutex_lock(&mutex); + assert(!ret); + UNUSED(ret); +#endif +} + +void Mutex::unlock() +{ +#ifdef _WIN32 + LeaveCriticalSection(&mutex); +#else + int ret = pthread_mutex_unlock(&mutex); + assert(!ret); + UNUSED(ret); +#endif +} + +#endif + diff --git a/src/threading/mutex.h b/src/threading/mutex.h new file mode 100644 index 00000000..f1a4882b --- /dev/null +++ b/src/threading/mutex.h @@ -0,0 +1,69 @@ +/* +This file is a part of the JThread package, which contains some object- +oriented thread wrappers for different thread implementations. + +Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + +#ifndef THREADING_MUTEX_H +#define THREADING_MUTEX_H + +// Windows std::mutex is much slower than the critical section API +#if __cplusplus >= 201103L && !defined(_WIN32) + #include + using Mutex = std::mutex; +#else + +#ifdef _WIN32 + #ifndef _WIN32_WINNT + #define _WIN32_WINNT 0x0501 + #endif + #ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN + #endif + #include +#else // pthread + #include +#endif + +#include "basicmacros.h" + +class Mutex +{ +public: + Mutex(); + ~Mutex(); + void lock(); + void unlock(); + +private: +#ifdef _WIN32 + CRITICAL_SECTION mutex; +#else // pthread + pthread_mutex_t mutex; +#endif + + DISABLE_CLASS_COPY(Mutex); +}; + +#endif // C++11 + +#endif diff --git a/src/jthread/LICENSE.MIT b/src/threading/mutex_auto_lock.h similarity index 52% rename from src/jthread/LICENSE.MIT rename to src/threading/mutex_auto_lock.h index 2aa4fd57..1c39349e 100644 --- a/src/jthread/LICENSE.MIT +++ b/src/threading/mutex_auto_lock.h @@ -1,4 +1,8 @@ -The license of JThread: +/* +This file is a part of the JThread package, which contains some object- +oriented thread wrappers for different thread implementations. + +Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), @@ -7,14 +11,40 @@ the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + +#ifndef THREADING_MUTEX_AUTO_LOCK_H +#define THREADING_MUTEX_AUTO_LOCK_H + +#if __cplusplus >= 201103L + #include + using MutexAutoLock = std::lock_guard; +#else + +#include "threading/mutex.h" + + +class MutexAutoLock +{ +public: + MutexAutoLock(Mutex &m) : mutex(m) { mutex.lock(); } + ~MutexAutoLock() { mutex.unlock(); } + +private: + Mutex &mutex; +}; + +#endif + +#endif diff --git a/src/threading/semaphore.cpp b/src/threading/semaphore.cpp new file mode 100644 index 00000000..3bca56b8 --- /dev/null +++ b/src/threading/semaphore.cpp @@ -0,0 +1,162 @@ +/* +Minetest +Copyright (C) 2013 sapier + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 3.0 of the License, or +(at your option) any later version. + +This program 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 Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "threading/semaphore.h" + +#include +#include +#include + +#define UNUSED(expr) do { (void)(expr); } while (0) + +#ifdef _WIN32 + #include + #define MAX_SEMAPHORE_COUNT LONG_MAX - 1 +#else + #include + #include + #include + #if defined(__MACH__) && defined(__APPLE__) + #include + #include + #include + #include + #include + + #undef sem_t + #undef sem_init + #undef sem_wait + #undef sem_post + #undef sem_destroy + #define sem_t semaphore_t + #define sem_init(s, p, c) semaphore_create(mach_task_self(), (s), 0, (c)) + #define sem_wait(s) semaphore_wait(*(s)) + #define sem_post(s) semaphore_signal(*(s)) + #define sem_destroy(s) semaphore_destroy(mach_task_self(), *(s)) + #endif +#endif + + +Semaphore::Semaphore(int val) +{ +#ifdef _WIN32 + semaphore = CreateSemaphore(NULL, val, MAX_SEMAPHORE_COUNT, NULL); +#else + int ret = sem_init(&semaphore, 0, val); + assert(!ret); + UNUSED(ret); +#endif +} + + +Semaphore::~Semaphore() +{ +#ifdef _WIN32 + CloseHandle(semaphore); +#else + int ret = sem_destroy(&semaphore); +#ifdef __ANDROID__ + // Workaround for broken bionic semaphore implementation! + assert(!ret || errno == EBUSY); +#else + assert(!ret); +#endif + UNUSED(ret); +#endif +} + + +void Semaphore::post(unsigned int num) +{ + assert(num > 0); +#ifdef _WIN32 + ReleaseSemaphore(semaphore, num, NULL); +#else + for (unsigned i = 0; i < num; i++) { + int ret = sem_post(&semaphore); + assert(!ret); + UNUSED(ret); + } +#endif +} + + +void Semaphore::wait() +{ +#ifdef _WIN32 + WaitForSingleObject(semaphore, INFINITE); +#else + int ret = sem_wait(&semaphore); + assert(!ret); + UNUSED(ret); +#endif +} + + +bool Semaphore::wait(unsigned int time_ms) +{ +#ifdef _WIN32 + unsigned int ret = WaitForSingleObject(semaphore, time_ms); + + if (ret == WAIT_OBJECT_0) { + return true; + } else { + assert(ret == WAIT_TIMEOUT); + return false; + } +#else +# if defined(__MACH__) && defined(__APPLE__) + mach_timespec_t wait_time; + wait_time.tv_sec = time_ms / 1000; + wait_time.tv_nsec = 1000000 * (time_ms % 1000); + + errno = 0; + int ret = semaphore_timedwait(semaphore, wait_time); + switch (ret) { + case KERN_OPERATION_TIMED_OUT: + errno = ETIMEDOUT; + break; + case KERN_ABORTED: + errno = EINTR; + break; + default: + if (ret) + errno = EINVAL; + } +# else + struct timespec wait_time; + struct timeval now; + + if (gettimeofday(&now, NULL) == -1) { + std::cerr << "Semaphore::wait(ms): Unable to get time with gettimeofday!" << std::endl; + abort(); + } + + wait_time.tv_nsec = ((time_ms % 1000) * 1000 * 1000) + (now.tv_usec * 1000); + wait_time.tv_sec = (time_ms / 1000) + (wait_time.tv_nsec / (1000 * 1000 * 1000)) + now.tv_sec; + wait_time.tv_nsec %= 1000 * 1000 * 1000; + + int ret = sem_timedwait(&semaphore, &wait_time); +# endif + + assert(!ret || (errno == ETIMEDOUT || errno == EINTR)); + return !ret; +#endif +} + diff --git a/src/jthread/jsemaphore.h b/src/threading/semaphore.h similarity index 57% rename from src/jthread/jsemaphore.h rename to src/threading/semaphore.h index 29af9852..b7a8769c 100644 --- a/src/jthread/jsemaphore.h +++ b/src/threading/semaphore.h @@ -1,6 +1,6 @@ /* Minetest -Copyright (C) 2013 sapier, < sapier AT gmx DOT net > +Copyright (C) 2013 sapier This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -17,48 +17,39 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef JSEMAPHORE_H_ -#define JSEMAPHORE_H_ +#ifndef THREADING_SEMAPHORE_H +#define THREADING_SEMAPHORE_H -#if defined(WIN32) -#include -#include -#define MAX_SEMAPHORE_COUNT 1024 +#if defined(_WIN32) + #include #elif defined(__MACH__) && defined(__APPLE__) -#include -#include -#include -#include -#include -#include -#include + #include #else -#include -#include + #include #endif -class JSemaphore { +#include "basicmacros.h" + +class Semaphore { public: - JSemaphore(); - ~JSemaphore(); - JSemaphore(int initval); + Semaphore(int val=0); + ~Semaphore(); - void Post(); - void Wait(); - bool Wait(unsigned int time_ms); - - int GetValue(); + void post(unsigned int num=1); + void wait(); + bool wait(unsigned int time_ms); private: #if defined(WIN32) - HANDLE m_hSemaphore; + HANDLE semaphore; #elif defined(__MACH__) && defined(__APPLE__) - semaphore_t m_semaphore; - int semcount; + semaphore_t semaphore; #else - sem_t m_semaphore; + sem_t semaphore; #endif + + DISABLE_CLASS_COPY(Semaphore); }; +#endif -#endif /* JSEMAPHORE_H_ */ diff --git a/src/threading/thread.cpp b/src/threading/thread.cpp new file mode 100644 index 00000000..57b55150 --- /dev/null +++ b/src/threading/thread.cpp @@ -0,0 +1,439 @@ +/* +This file is a part of the JThread package, which contains some object- +oriented thread wrappers for different thread implementations. + +Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + +#include "threading/thread.h" +#include "threading/mutex_auto_lock.h" +#include "log.h" +#include "porting.h" + +#define UNUSED(expr) do { (void)(expr); } while (0) + +#if USE_CPP11_THREADS + #include + #include +#elif USE_WIN_THREADS + #ifndef _WIN32_WCE + #include + #endif +#elif USE_POSIX_THREADS + #include + #include + #include + #include + #include + + #if defined(__FreeBSD__) || defined(__APPLE__) + #include + #include + #elif defined(_GNU_SOURCE) + #include + #endif +#endif + + +// for setName +#if defined(linux) || defined(__linux) + #include +#elif defined(__FreeBSD__) || defined(__OpenBSD__) + #include +#elif defined(_MSC_VER) + struct THREADNAME_INFO { + 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 + }; +#endif + +// for bindToProcessor +#if __FreeBSD_version >= 702106 + typedef cpuset_t cpu_set_t; +#elif defined(__linux) || defined(linux) + #include +#elif defined(__sun) || defined(sun) + #include + #include + #include +#elif defined(_AIX) + #include + #include +#elif defined(__APPLE__) + #include + #include +#endif + + +Thread::Thread(const std::string &name) : + m_name(name), + m_retval(NULL), + m_joinable(false), + m_request_stop(false), + m_running(false) +{ +#ifdef _AIX + m_kernel_thread_id = -1; +#endif +} + + +Thread::~Thread() +{ + kill(); +} + + +bool Thread::start() +{ + MutexAutoLock lock(m_mutex); + + if (m_running) + return false; + + m_request_stop = false; + +#if USE_CPP11_THREADS + + try { + m_thread_obj = new std::thread(threadProc, this); + m_thread_id = m_thread_obj->get_id(); + m_thread_handle = m_thread_obj->native_handle(); + } catch (const std::system_error &e) { + return false; + } + +#elif USE_WIN_THREADS + + m_thread_handle = CreateThread(NULL, 0, threadProc, this, 0, &m_thread_id); + if (!m_thread_handle) + return false; + +#elif USE_POSIX_THREADS + + int status = pthread_create(&m_thread_handle, NULL, threadProc, this); + if (status) + return false; + + m_thread_id = m_thread_handle; + +#endif + + while (!m_running) + sleep_ms(1); + + m_joinable = true; + + return true; +} + + +bool Thread::stop() +{ + m_request_stop = true; + return true; +} + + +bool Thread::wait() +{ + MutexAutoLock lock(m_mutex); + + if (!m_joinable) + return false; + +#if USE_CPP11_THREADS + + m_thread_obj->join(); + + delete m_thread_obj; + m_thread_obj = NULL; + +#elif USE_WIN_THREADS + + int ret = WaitForSingleObject(m_thread_handle, INFINITE); + assert(ret == WAIT_OBJECT_0); + UNUSED(ret); + + CloseHandle(m_thread_handle); + m_thread_handle = NULL; + m_thread_id = -1; + +#elif USE_POSIX_THREADS + + int ret = pthread_join(m_thread_handle, NULL); + assert(ret == 0); + UNUSED(ret); + +#endif + + assert(m_running == false); + m_joinable = false; + return true; +} + + +bool Thread::kill() +{ + if (!m_running) { + wait(); + return false; + } + + m_running = false; + +#ifdef _WIN32 + TerminateThread(m_thread_handle, 0); + CloseHandle(m_thread_handle); +#else + // We need to pthread_kill instead on Android since NDKv5's pthread + // implementation is incomplete. +# ifdef __ANDROID__ + pthread_kill(m_thread_handle, SIGKILL); +# else + pthread_cancel(m_thread_handle); +# endif + wait(); +#endif + + m_retval = NULL; + m_joinable = false; + m_request_stop = false; + + return true; +} + + +bool Thread::getReturnValue(void **ret) +{ + if (m_running) + return false; + + *ret = m_retval; + return true; +} + + +bool Thread::isCurrentThread() +{ + return thr_is_current_thread(m_thread_id); +} + + +#if USE_CPP11_THREADS || USE_POSIX_THREADS +void *Thread::threadProc(void *param) +#elif defined(_WIN32_WCE) +DWORD Thread::threadProc(LPVOID param) +#elif defined(_WIN32) +DWORD WINAPI Thread::threadProc(LPVOID param) +#endif +{ + Thread *thr = (Thread *)param; + +#ifdef _AIX + m_kernel_thread_id = thread_self(); +#endif + + thr->setName(thr->m_name); + + g_logger.registerThread(thr->m_name); + thr->m_running = true; + + thr->m_retval = thr->run(); + + thr->m_running = false; + g_logger.deregisterThread(); + + return NULL; +} + + +void Thread::setName(const std::string &name) +{ +#if defined(linux) || defined(__linux) + + // It would be cleaner to do this with pthread_setname_np, + // which was added to glibc in version 2.12, but some major + // distributions are still runing 2.11 and previous versions. + prctl(PR_SET_NAME, name.c_str()); + +#elif defined(__FreeBSD__) || defined(__OpenBSD__) + + pthread_set_name_np(pthread_self(), name.c_str()); + +#elif defined(__NetBSD__) + + pthread_setname_np(pthread_self(), name.c_str()); + +#elif defined(__APPLE__) + + pthread_setname_np(name.c_str()); + +#elif defined(_MSC_VER) + + // Windows itself doesn't support thread names, + // but the MSVC debugger does... + THREADNAME_INFO info; + + info.dwType = 0x1000; + info.szName = name.c_str(); + info.dwThreadID = -1; + info.dwFlags = 0; + + __try { + RaiseException(0x406D1388, 0, + sizeof(info) / sizeof(DWORD), (ULONG_PTR *)&info); + } __except (EXCEPTION_CONTINUE_EXECUTION) { + } + +#elif defined(_WIN32) || defined(__GNU__) + + // These platforms are known to not support thread names. + // Silently ignore the request. + +#else + #warning "Unrecognized platform, thread names will not be available." +#endif +} + + +unsigned int Thread::getNumberOfProcessors() +{ +#if __cplusplus >= 201103L + + return std::thread::hardware_concurrency(); + +#elif defined(_SC_NPROCESSORS_ONLN) + + return sysconf(_SC_NPROCESSORS_ONLN); + +#elif defined(__FreeBSD__) || defined(__NetBSD__) || \ + defined(__DragonFly__) || defined(__APPLE__) + + unsigned int num_cpus = 1; + size_t len = sizeof(num_cpus); + + int mib[2]; + mib[0] = CTL_HW; + mib[1] = HW_NCPU; + + sysctl(mib, 2, &num_cpus, &len, NULL, 0); + return num_cpus; + +#elif defined(_GNU_SOURCE) + + return get_nprocs(); + +#elif defined(_WIN32) + + SYSTEM_INFO sysinfo; + GetSystemInfo(&sysinfo); + return sysinfo.dwNumberOfProcessors; + +#elif defined(PTW32_VERSION) || defined(__hpux) + + return pthread_num_processors_np(); + +#else + + return 1; + +#endif +} + + +bool Thread::bindToProcessor(unsigned int proc_number) +{ +#if defined(__ANDROID__) + + return false; + +#elif defined(_WIN32) + + return SetThreadAffinityMask(m_thread_handle, 1 << proc_number); + +#elif __FreeBSD_version >= 702106 || defined(__linux) || defined(linux) + + cpu_set_t cpuset; + + CPU_ZERO(&cpuset); + CPU_SET(proc_number, &cpuset); + + return pthread_setaffinity_np(m_thread_handle, sizeof(cpuset), &cpuset) == 0; + +#elif defined(__sun) || defined(sun) + + return processor_bind(P_LWPID, P_MYID, proc_number, NULL) == 0 + +#elif defined(_AIX) + + return bindprocessor(BINDTHREAD, m_kernel_thread_id, proc_number) == 0; + +#elif defined(__hpux) || defined(hpux) + + pthread_spu_t answer; + + return pthread_processor_bind_np(PTHREAD_BIND_ADVISORY_NP, + &answer, proc_number, m_thread_handle) == 0; + +#elif defined(__APPLE__) + + struct thread_affinity_policy tapol; + + thread_port_t threadport = pthread_mach_thread_np(m_thread_handle); + tapol.affinity_tag = proc_number + 1; + return thread_policy_set(threadport, THREAD_AFFINITY_POLICY, + (thread_policy_t)&tapol, + THREAD_AFFINITY_POLICY_COUNT) == KERN_SUCCESS; + +#else + + return false; + +#endif +} + + +bool Thread::setPriority(int prio) +{ +#if defined(_WIN32) + + return SetThreadPriority(m_thread_handle, prio); + +#else + + struct sched_param sparam; + int policy; + + if (pthread_getschedparam(m_thread_handle, &policy, &sparam) != 0) + return false; + + int min = sched_get_priority_min(policy); + int max = sched_get_priority_max(policy); + + sparam.sched_priority = min + prio * (max - min) / THREAD_PRIORITY_HIGHEST; + return pthread_setschedparam(m_thread_handle, policy, &sparam) == 0; + +#endif +} + diff --git a/src/threading/thread.h b/src/threading/thread.h new file mode 100644 index 00000000..5f2d8aad --- /dev/null +++ b/src/threading/thread.h @@ -0,0 +1,169 @@ +/* +This file is a part of the JThread package, which contains some object- +oriented thread wrappers for different thread implementations. + +Copyright (c) 2000-2006 Jori Liesenborgs (jori.liesenborgs@gmail.com) + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + +#ifndef THREADING_THREAD_H +#define THREADING_THREAD_H + +#include "basicmacros.h" +#include "threading/atomic.h" +#include "threading/mutex.h" +#include "threads.h" + +#include +#if USE_CPP11_THREADS + #include // for std::thread +#endif +#ifdef _AIX + #include // for tid_t +#endif + +/* + * On platforms using pthreads, these five priority classes correlate to + * even divisions between the minimum and maximum reported thread priority. + */ +#if !defined(_WIN32) + #define THREAD_PRIORITY_LOWEST 0 + #define THREAD_PRIORITY_BELOW_NORMAL 1 + #define THREAD_PRIORITY_NORMAL 2 + #define THREAD_PRIORITY_ABOVE_NORMAL 3 + #define THREAD_PRIORITY_HIGHEST 4 +#endif + + +class Thread { +public: + Thread(const std::string &name=""); + virtual ~Thread(); + + /* + * Begins execution of a new thread at the pure virtual method Thread::run(). + * Execution of the thread is guaranteed to have started after this function + * returns. + */ + bool start(); + + /* + * Requests that the thread exit gracefully. + * Returns immediately; thread execution is guaranteed to be complete after + * a subsequent call to Thread::wait. + */ + bool stop(); + + /* + * Immediately terminates the thread. + * This should be used with extreme caution, as the thread will not have + * any opportunity to release resources it may be holding (such as memory + * or locks). + */ + bool kill(); + + /* + * Waits for thread to finish. + * Note: This does not stop a thread, you have to do this on your own. + * Returns false immediately if the thread is not started or has been waited + * on before. + */ + bool wait(); + + /* + * Returns true if the calling thread is this Thread object. + */ + bool isCurrentThread(); + + inline bool isRunning() { return m_running; } + inline bool stopRequested() { return m_request_stop; } + inline threadid_t getThreadId() { return m_thread_id; } + inline threadhandle_t getThreadHandle() { return m_thread_handle; } + + /* + * Gets the thread return value. + * Returns true if the thread has exited and the return value was available, + * or false if the thread has yet to finish. + */ + bool getReturnValue(void **ret); + + /* + * Binds (if possible, otherwise sets the affinity of) the thread to the + * specific processor specified by proc_number. + */ + bool bindToProcessor(unsigned int proc_number); + + /* + * Sets the thread priority to the specified priority. + * + * prio can be one of: THREAD_PRIORITY_LOWEST, THREAD_PRIORITY_BELOW_NORMAL, + * THREAD_PRIORITY_NORMAL, THREAD_PRIORITY_ABOVE_NORMAL, THREAD_PRIORITY_HIGHEST. + * On Windows, any of the other priorites as defined by SetThreadPriority + * are supported as well. + * + * Note that it may be necessary to first set the threading policy or + * scheduling algorithm to one that supports thread priorities if not + * supported by default, otherwise this call will have no effect. + */ + bool setPriority(int prio); + + /* + * Sets the currently executing thread's name to where supported; useful + * for debugging. + */ + static void setName(const std::string &name); + + /* + * Returns the number of processors/cores configured and active on this machine. + */ + static unsigned int getNumberOfProcessors(); + +protected: + std::string m_name; + + virtual void *run() = 0; + +private: + void *m_retval; + bool m_joinable; + Atomic m_request_stop; + Atomic m_running; + Mutex m_mutex; + + threadid_t m_thread_id; + threadhandle_t m_thread_handle; + + static ThreadStartFunc threadProc; + +#ifdef _AIX + // For AIX, there does not exist any mapping from pthread_t to tid_t + // available to us, so we maintain one ourselves. This is set on thread start. + tid_t m_kernel_thread_id; +#endif + +#if USE_CPP11_THREADS + std::thread *m_thread_obj; +#endif + + DISABLE_CLASS_COPY(Thread); +}; + +#endif + diff --git a/src/threads.h b/src/threads.h index f0671f16..ad631f57 100644 --- a/src/threads.h +++ b/src/threads.h @@ -20,22 +20,75 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef THREADS_HEADER #define THREADS_HEADER -#include "jthread/jmutex.h" - -#if (defined(WIN32) || defined(_WIN32_WCE)) -typedef DWORD threadid_t; +// +// Determine which threading API we will use +// +#if __cplusplus >= 201103L + #define USE_CPP11_THREADS 1 +#elif defined(_WIN32) + #define USE_WIN_THREADS 1 #else -typedef pthread_t threadid_t; + #define USE_POSIX_THREADS 1 #endif -inline threadid_t get_current_thread_id() +/////////////// + + +#if USE_CPP11_THREADS + #include +#endif + +#include "threading/mutex.h" + +// +// threadid_t, threadhandle_t +// +#if USE_CPP11_THREADS + typedef std::thread::id threadid_t; + typedef std::thread::native_handle_type threadhandle_t; +#elif USE_WIN_THREADS + typedef DWORD threadid_t; + typedef HANDLE threadhandle_t; +#elif USE_POSIX_THREADS + typedef pthread_t threadid_t; + typedef pthread_t threadhandle_t; +#endif + +// +// ThreadStartFunc +// +#if USE_CPP11_THREADS || USE_POSIX_THREADS + typedef void *ThreadStartFunc(void *param); +#elif defined(_WIN32_WCE) + typedef DWORD ThreadStartFunc(LPVOID param); +#elif defined(_WIN32) + typedef DWORD WINAPI ThreadStartFunc(LPVOID param); +#endif + + +inline threadid_t thr_get_current_thread_id() { -#if (defined(WIN32) || defined(_WIN32_WCE)) +#if USE_CPP11_THREADS + return std::this_thread::get_id(); +#elif USE_WIN_THREADS return GetCurrentThreadId(); -#else +#elif USE_POSIX_THREADS return pthread_self(); #endif } +inline bool thr_compare_thread_id(threadid_t thr1, threadid_t thr2) +{ +#if USE_POSIX_THREADS + return pthread_equal(thr1, thr2); +#else + return thr1 == thr2; #endif +} +inline bool thr_is_current_thread(threadid_t thr) +{ + return thr_compare_thread_id(thr_get_current_thread_id(), thr); +} + +#endif diff --git a/src/tool.cpp b/src/tool.cpp index 689d70a8..62084098 100644 --- a/src/tool.cpp +++ b/src/tool.cpp @@ -35,7 +35,7 @@ void ToolCapabilities::serialize(std::ostream &os, u16 protocol_version) const writeS16(os, max_drop_level); writeU32(os, groupcaps.size()); for(std::map::const_iterator - i = groupcaps.begin(); i != groupcaps.end(); i++){ + i = groupcaps.begin(); i != groupcaps.end(); ++i){ const std::string *name = &i->first; const ToolGroupCap *cap = &i->second; os<maxlevel); writeU32(os, cap->times.size()); for(std::map::const_iterator - i = cap->times.begin(); i != cap->times.end(); i++){ + i = cap->times.begin(); i != cap->times.end(); ++i){ writeS16(os, i->first); writeF1000(os, i->second); } @@ -51,7 +51,7 @@ void ToolCapabilities::serialize(std::ostream &os, u16 protocol_version) const if(protocol_version > 17){ writeU32(os, damageGroups.size()); for(std::map::const_iterator - i = damageGroups.begin(); i != damageGroups.end(); i++){ + i = damageGroups.begin(); i != damageGroups.end(); ++i){ os<first); writeS16(os, i->second); } @@ -116,7 +116,7 @@ DigParams getDigParams(const ItemGroupList &groups, int level = itemgroup_get(groups, "level"); //infostream<<"level="<::const_iterator - i = tp->groupcaps.begin(); i != tp->groupcaps.end(); i++){ + i = tp->groupcaps.begin(); i != tp->groupcaps.end(); ++i){ const std::string &name = i->first; //infostream<<"group="<second; @@ -164,7 +164,7 @@ HitParams getHitParams(const ItemGroupList &armor_groups, float full_punch_interval = tp->full_punch_interval; for(std::map::const_iterator - i = tp->damageGroups.begin(); i != tp->damageGroups.end(); i++){ + i = tp->damageGroups.begin(); i != tp->damageGroups.end(); ++i){ s16 armor = itemgroup_get(armor_groups, i->first); damage += i->second * rangelim(time_from_last_punch / full_punch_interval, 0.0, 1.0) * armor / 100.0; diff --git a/src/touchscreengui.cpp b/src/touchscreengui.cpp index bcc97a8c..28566992 100644 --- a/src/touchscreengui.cpp +++ b/src/touchscreengui.cpp @@ -51,8 +51,8 @@ const char *touchgui_button_imagenames[] = { #ifdef ENABLE_ANDROID_NOCLIP "fly_btn.png", "noclip_btn.png", - "fast_btn.png", #endif + "fast_btn.png", "debug_btn.png", "chat_btn.png", // "camera_btn.png", @@ -94,10 +94,10 @@ static irr::EKEY_CODE id2keycode(touch_gui_button_id id) case noclip_id: key = "noclip"; break; - case fast_id: - key = "fastmove"; - break; #endif + case fast_id: + key = "minimap"; + break; case debug_id: key = "toggle_debug"; break; @@ -288,7 +288,7 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc, float density) m_screensize.Y - (button_size*4)), L"clip", false, SLOW_BUTTON_REPEAT); - +#endif /* init fast button */ initButton(fast_id, rect(m_screensize.X - (0.75*button_size), @@ -296,7 +296,6 @@ void TouchScreenGUI::init(ISimpleTextureSource* tsrc, float density) m_screensize.X, m_screensize.Y - (button_size*3.25)), L"fast", false, SLOW_BUTTON_REPEAT); -#endif #ifndef NDEBUG /* init debug button */ initButton(debug_id, @@ -364,7 +363,7 @@ bool TouchScreenGUI::isHUDButton(const SEvent &event) { // check if hud item is pressed for (std::map >::iterator iter = m_hud_rects.begin(); - iter != m_hud_rects.end(); iter++) { + iter != m_hud_rects.end(); ++iter) { if (iter->second.isPointInside( v2s32(event.TouchInput.X, event.TouchInput.Y) @@ -565,7 +564,7 @@ void TouchScreenGUI::translateEvent(const SEvent &event) } for (std::vector::iterator iter = m_known_ids.begin(); - iter != m_known_ids.end(); iter++) { + iter != m_known_ids.end(); ++iter) { if (iter->id == event.TouchInput.ID) { m_known_ids.erase(iter); break; @@ -646,7 +645,7 @@ void TouchScreenGUI::handleChangedButton(const SEvent &event) continue; } for(std::vector::iterator iter = m_buttons[i].ids.begin(); - iter != m_buttons[i].ids.end(); iter++) { + iter != m_buttons[i].ids.end(); ++iter) { if (event.TouchInput.ID == *iter) { diff --git a/src/touchscreengui.h b/src/touchscreengui.h index b0e91fe1..68d77e6c 100644 --- a/src/touchscreengui.h +++ b/src/touchscreengui.h @@ -47,8 +47,8 @@ typedef enum { #ifdef ENABLE_ANDROID_NOCLIP fly_id, noclip_id, - fast_id, #endif + fast_id, debug_id, chat_id, // camera_id, diff --git a/src/treegen.cpp b/src/treegen.cpp index ec9b3ecf..c7e0c507 100644 --- a/src/treegen.cpp +++ b/src/treegen.cpp @@ -755,9 +755,19 @@ void make_pine_tree(MMVManip &vmanip, v3s16 p0, INodeDefManager *ndef, int seed) and in games that have saplings; both are deprecated but not replaced yet */ - MapNode treenode(ndef->getId("mapgen_pinetree")); - MapNode leavesnode(ndef->getId("mapgen_pine_needles")); - MapNode snownode(ndef->getId("mapgen_snow")); + content_t c_tree = ndef->getId("mapgen_pine_tree"); + content_t c_leaves = ndef->getId("mapgen_pine_needles"); + content_t c_snow = ndef->getId("mapgen_snow"); + if (c_tree == CONTENT_IGNORE) + c_tree = ndef->getId("mapgen_tree"); + if (c_leaves == CONTENT_IGNORE) + c_leaves = ndef->getId("mapgen_leaves"); + if (c_snow == CONTENT_IGNORE) + c_snow = CONTENT_AIR; + + MapNode treenode(c_tree); + MapNode leavesnode(c_leaves); + MapNode snownode(c_snow); PseudoRandom pr(seed); s16 trunk_h = pr.range(9, 13); diff --git a/src/unittest/CMakeLists.txt b/src/unittest/CMakeLists.txt index dcc68f9c..a07ed8ba 100644 --- a/src/unittest/CMakeLists.txt +++ b/src/unittest/CMakeLists.txt @@ -1,5 +1,6 @@ set (UNITTEST_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_areastore.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_collision.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_compression.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_connection.cpp @@ -16,6 +17,7 @@ set (UNITTEST_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/test_serialization.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_settings.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_socket.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/test_threading.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_utilities.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_voxelalgorithms.cpp ${CMAKE_CURRENT_SOURCE_DIR}/test_voxelmanipulator.cpp diff --git a/src/unittest/test.cpp b/src/unittest/test.cpp index a357634f..3642a307 100644 --- a/src/unittest/test.cpp +++ b/src/unittest/test.cpp @@ -19,7 +19,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "test.h" -#include "debug.h" #include "log.h" #include "nodedef.h" #include "itemdef.h" @@ -216,14 +215,14 @@ void TestGameDef::defineSomeNodes() //// run_tests //// -void run_tests() +bool run_tests() { - DSTACK(__FUNCTION_NAME); + DSTACK(FUNCTION_NAME); u32 t1 = porting::getTime(PRECISION_MILLI); TestGameDef gamedef; - log_set_lev_silence(LMT_ERROR, true); + g_logger.setLevelSilenced(LL_ERROR, true); u32 num_modules_failed = 0; u32 num_total_tests_failed = 0; @@ -239,11 +238,11 @@ void run_tests() u32 tdiff = porting::getTime(PRECISION_MILLI) - t1; - log_set_lev_silence(LMT_ERROR, false); + g_logger.setLevelSilenced(LL_ERROR, false); const char *overall_status = (num_modules_failed == 0) ? "PASSED" : "FAILED"; - dstream + rawstream << "++++++++++++++++++++++++++++++++++++++++" << "++++++++++++++++++++++++++++++++++++++++" << std::endl << "Unit Test Results: " << overall_status << std::endl @@ -254,8 +253,7 @@ void run_tests() << "++++++++++++++++++++++++++++++++++++++++" << "++++++++++++++++++++++++++++++++++++++++" << std::endl; - if (num_modules_failed) - abort(); + return num_modules_failed; } //// @@ -264,14 +262,14 @@ void run_tests() bool TestBase::testModule(IGameDef *gamedef) { - dstream << "======== Testing module " << getName() << std::endl; + rawstream << "======== Testing module " << getName() << std::endl; u32 t1 = porting::getTime(PRECISION_MILLI); runTests(gamedef); u32 tdiff = porting::getTime(PRECISION_MILLI) - t1; - dstream << "======== Module " << getName() << " " + rawstream << "======== Module " << getName() << " " << (num_tests_failed ? "failed" : "passed") << " (" << num_tests_failed << " failures / " << num_tests_run << " tests) - " << tdiff << "ms" << std::endl; diff --git a/src/unittest/test.h b/src/unittest/test.h index 358f78b7..dee20057 100644 --- a/src/unittest/test.h +++ b/src/unittest/test.h @@ -32,56 +32,61 @@ class TestFailedException : public std::exception { }; // Runs a unit test and reports results -#define TEST(fxn, ...) do { \ - u32 t1 = porting::getTime(PRECISION_MILLI); \ - try { \ - fxn(__VA_ARGS__); \ - dstream << "[PASS] "; \ - } catch (...) { \ - dstream << "[FAIL] "; \ - num_tests_failed++; \ - } \ - num_tests_run++; \ - u32 tdiff = porting::getTime(PRECISION_MILLI) - t1; \ - dstream << #fxn << " - " << tdiff << "ms" << std::endl; \ +#define TEST(fxn, ...) do { \ + u32 t1 = porting::getTime(PRECISION_MILLI); \ + try { \ + fxn(__VA_ARGS__); \ + rawstream << "[PASS] "; \ + } catch (TestFailedException &e) { \ + rawstream << "[FAIL] "; \ + num_tests_failed++; \ + } catch (std::exception &e) { \ + rawstream << "Caught unhandled exception: " << e.what() << std::endl; \ + rawstream << "[FAIL] "; \ + num_tests_failed++; \ + } \ + num_tests_run++; \ + u32 tdiff = porting::getTime(PRECISION_MILLI) - t1; \ + rawstream << #fxn << " - " << tdiff << "ms" << std::endl; \ } while (0) // Asserts the specified condition is true, or fails the current unit test -#define UASSERT(x) do { \ - if (!(x)) { \ - dstream << "Test assertion failed: " #x << std::endl \ - << " at " << fs::GetFilenameFromPath(__FILE__) \ - << ":" << __LINE__ << std::endl; \ - throw TestFailedException(); \ - } \ +#define UASSERT(x) do { \ + if (!(x)) { \ + rawstream << "Test assertion failed: " #x << std::endl \ + << " at " << fs::GetFilenameFromPath(__FILE__) \ + << ":" << __LINE__ << std::endl; \ + throw TestFailedException(); \ + } \ } while (0) // Asserts the specified condition is true, or fails the current unit test // and prints the format specifier fmt -#define UTEST(x, fmt, ...) do { \ - if (!(x)) { \ - char utest_buf[1024]; \ - snprintf(utest_buf, sizeof(utest_buf), fmt, __VA_ARGS__); \ - dstream << "Test assertion failed: " << utest_buf << std::endl \ - << " at " << fs::GetFilenameFromPath(__FILE__) \ - << ":" << __LINE__ << std::endl; \ - throw TestFailedException(); \ - } \ +#define UTEST(x, fmt, ...) do { \ + if (!(x)) { \ + char utest_buf[1024]; \ + snprintf(utest_buf, sizeof(utest_buf), fmt, __VA_ARGS__); \ + rawstream << "Test assertion failed: " << utest_buf << std::endl \ + << " at " << fs::GetFilenameFromPath(__FILE__) \ + << ":" << __LINE__ << std::endl; \ + throw TestFailedException(); \ + } \ } while (0) // Asserts the comparison specified by CMP is true, or fails the current unit test -#define UASSERTCMP(T, CMP, actual, expected) do { \ - T a = (actual); \ - T e = (expected); \ - if (!(a CMP e)) { \ - dstream << "Test assertion failed: " << #actual << " " << #CMP << " " \ - << #expected << std::endl \ - << " at " << fs::GetFilenameFromPath(__FILE__) << ":" \ - << __LINE__ << std::endl \ - << " actual: " << a << std::endl << " expected: " \ - << e << std::endl; \ - throw TestFailedException(); \ - } \ +#define UASSERTCMP(T, CMP, actual, expected) do { \ + T a = (actual); \ + T e = (expected); \ + if (!(a CMP e)) { \ + rawstream \ + << "Test assertion failed: " << #actual << " " << #CMP << " " \ + << #expected << std::endl \ + << " at " << fs::GetFilenameFromPath(__FILE__) << ":" \ + << __LINE__ << std::endl \ + << " actual: " << a << std::endl << " expected: " \ + << e << std::endl; \ + throw TestFailedException(); \ + } \ } while (0) #define UASSERTEQ(T, actual, expected) UASSERTCMP(T, ==, actual, expected) @@ -137,6 +142,6 @@ extern content_t t_CONTENT_WATER; extern content_t t_CONTENT_LAVA; extern content_t t_CONTENT_BRICK; -void run_tests(); +bool run_tests(); #endif diff --git a/src/unittest/test_areastore.cpp b/src/unittest/test_areastore.cpp new file mode 100644 index 00000000..ef661f65 --- /dev/null +++ b/src/unittest/test_areastore.cpp @@ -0,0 +1,129 @@ +/* +Minetest +Copyright (C) 2015 est31, + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 3.0 of the License, or +(at your option) any later version. + +This program 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 Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "test.h" + +#include "areastore.h" + +class TestAreaStore : public TestBase { +public: + TestAreaStore() { TestManager::registerTestModule(this); } + const char *getName() { return "TestAreaStore"; } + + void runTests(IGameDef *gamedef); + + void genericStoreTest(AreaStore *store); + void testVectorStore(); + void testSpatialStore(); +}; + +static TestAreaStore g_test_instance; + +void TestAreaStore::runTests(IGameDef *gamedef) +{ + TEST(testVectorStore); +#if USE_SPATIAL + TEST(testSpatialStore); +#endif +} + +//////////////////////////////////////////////////////////////////////////////// + +void TestAreaStore::testVectorStore() +{ + VectorAreaStore store; + genericStoreTest(&store); +} + +void TestAreaStore::testSpatialStore() +{ +#if USE_SPATIAL + SpatialAreaStore store; + genericStoreTest(&store); +#endif +} + +void TestAreaStore::genericStoreTest(AreaStore *store) +{ + Area a(v3s16(-10, -3, 5), v3s16(0, 29, 7)); + a.id = 1; + Area b(v3s16(-5, -2, 5), v3s16(0, 28, 6)); + b.id = 2; + Area c(v3s16(-7, -3, 6), v3s16(-1, 27, 7)); + c.id = 3; + std::vector res; + + UASSERTEQ(size_t, store->size(), 0); + store->reserve(2); // sic + store->insertArea(a); + store->insertArea(b); + store->insertArea(c); + UASSERTEQ(size_t, store->size(), 3); + + store->getAreasForPos(&res, v3s16(-1, 0, 6)); + UASSERTEQ(size_t, res.size(), 3); + res.clear(); + store->getAreasForPos(&res, v3s16(0, 0, 7)); + UASSERTEQ(size_t, res.size(), 1); + UASSERTEQ(u32, res[0]->id, 1); + res.clear(); + + store->removeArea(1); + + store->getAreasForPos(&res, v3s16(0, 0, 7)); + UASSERTEQ(size_t, res.size(), 0); + res.clear(); + + store->insertArea(a); + + store->getAreasForPos(&res, v3s16(0, 0, 7)); + UASSERTEQ(size_t, res.size(), 1); + UASSERTEQ(u32, res[0]->id, 1); + res.clear(); + + store->getAreasInArea(&res, v3s16(-10, -3, 5), v3s16(0, 29, 7), false); + UASSERTEQ(size_t, res.size(), 3); + res.clear(); + + store->getAreasInArea(&res, v3s16(-100, 0, 6), v3s16(200, 0, 6), false); + UASSERTEQ(size_t, res.size(), 0); + res.clear(); + + store->getAreasInArea(&res, v3s16(-100, 0, 6), v3s16(200, 0, 6), true); + UASSERTEQ(size_t, res.size(), 3); + res.clear(); + + store->removeArea(1); + store->removeArea(2); + store->removeArea(3); + + Area d(v3s16(-100, -300, -200), v3s16(-50, -200, -100)); + d.id = 4; + d.data = "Hi!"; + store->insertArea(d); + + store->getAreasForPos(&res, v3s16(-75, -250, -150)); + UASSERTEQ(size_t, res.size(), 1); + UASSERTEQ(u32, res[0]->id, 4); + UASSERTEQ(u16, res[0]->data.size(), 3); + UASSERT(strncmp(res[0]->data.c_str(), "Hi!", 3) == 0); + res.clear(); + + store->removeArea(4); +} diff --git a/src/unittest/test_mapnode.cpp b/src/unittest/test_mapnode.cpp index 4079b7c6..19065124 100644 --- a/src/unittest/test_mapnode.cpp +++ b/src/unittest/test_mapnode.cpp @@ -53,6 +53,4 @@ void TestMapNode::testNodeProperties(INodeDefManager *nodedef) // Transparency n.setContent(CONTENT_AIR); UASSERT(nodedef->get(n).light_propagates == true); - n.setContent(LEGN(nodedef, "CONTENT_STONE")); - UASSERT(nodedef->get(n).light_propagates == false); } diff --git a/src/unittest/test_random.cpp b/src/unittest/test_random.cpp index 44fa4458..5b957afd 100644 --- a/src/unittest/test_random.cpp +++ b/src/unittest/test_random.cpp @@ -101,6 +101,9 @@ void TestRandom::testPcgRandomRange() EXCEPTION_CHECK(PrngException, pr.range(5, 1)); + // Regression test for bug 3027 + pr.range(pr.RANDOM_MIN, pr.RANDOM_MAX); + for (u32 i = 0; i != 32768; i++) { int min = (pr.next() % 3000) - 500; int max = (pr.next() % 3000) - 500; diff --git a/src/unittest/test_serialization.cpp b/src/unittest/test_serialization.cpp index e617f242..95b54b3b 100644 --- a/src/unittest/test_serialization.cpp +++ b/src/unittest/test_serialization.cpp @@ -34,10 +34,21 @@ public: void testSerializeWideString(); void testSerializeLongString(); void testSerializeJsonString(); + void testSerializeHex(); + void testDeSerializeString(); + void testDeSerializeWideString(); + void testDeSerializeLongString(); + void testStreamRead(); + void testStreamWrite(); + void testVecPut(); + void testStringLengthLimits(); + void testBufReader(); std::string teststring2; std::wstring teststring2_w; std::string teststring2_w_encoded; + + static const u8 test_serialized_data[12 * 13]; }; static TestSerialization g_test_instance; @@ -47,9 +58,18 @@ void TestSerialization::runTests(IGameDef *gamedef) buildTestStrings(); TEST(testSerializeString); + TEST(testDeSerializeString); TEST(testSerializeWideString); + TEST(testDeSerializeWideString); TEST(testSerializeLongString); + TEST(testDeSerializeLongString); TEST(testSerializeJsonString); + TEST(testSerializeHex); + TEST(testStreamRead); + TEST(testStreamWrite); + TEST(testVecPut); + TEST(testStringLengthLimits); + TEST(testBufReader); } //////////////////////////////////////////////////////////////////////////////// @@ -80,20 +100,37 @@ void TestSerialization::buildTestStrings() void TestSerialization::testSerializeString() { // Test blank string - UASSERT(serializeString("Hello world!") == mkstr("\0\14Hello world!")); + UASSERT(serializeString("") == mkstr("\0\0")); // Test basic string - UASSERT(serializeString("") == mkstr("\0\0")); + UASSERT(serializeString("Hello world!") == mkstr("\0\14Hello world!")); // Test character range UASSERT(serializeString(teststring2) == mkstr("\1\0") + teststring2); +} +void TestSerialization::testDeSerializeString() +{ // Test deserialize - std::istringstream is(serializeString(teststring2), std::ios::binary); - UASSERT(deSerializeString(is) == teststring2); - UASSERT(!is.eof()); - is.get(); - UASSERT(is.eof()); + { + std::istringstream is(serializeString(teststring2), std::ios::binary); + UASSERT(deSerializeString(is) == teststring2); + UASSERT(!is.eof()); + is.get(); + UASSERT(is.eof()); + } + + // Test deserialize an incomplete length specifier + { + std::istringstream is(mkstr("\x53"), std::ios::binary); + EXCEPTION_CHECK(SerializationError, deSerializeString(is)); + } + + // Test deserialize a string with incomplete data + { + std::istringstream is(mkstr("\x00\x55 abcdefg"), std::ios::binary); + EXCEPTION_CHECK(SerializationError, deSerializeString(is)); + } } void TestSerialization::testSerializeWideString() @@ -102,19 +139,42 @@ void TestSerialization::testSerializeWideString() UASSERT(serializeWideString(L"") == mkstr("\0\0")); // Test basic string - UASSERT(serializeWideString(narrow_to_wide("Hello world!")) == + UASSERT(serializeWideString(utf8_to_wide("Hello world!")) == mkstr("\0\14\0H\0e\0l\0l\0o\0 \0w\0o\0r\0l\0d\0!")); // Test character range UASSERT(serializeWideString(teststring2_w) == mkstr("\1\0") + teststring2_w_encoded); +} +void TestSerialization::testDeSerializeWideString() +{ // Test deserialize - std::istringstream is(serializeWideString(teststring2_w), std::ios::binary); - UASSERT(deSerializeWideString(is) == teststring2_w); - UASSERT(!is.eof()); - is.get(); - UASSERT(is.eof()); + { + std::istringstream is(serializeWideString(teststring2_w), std::ios::binary); + UASSERT(deSerializeWideString(is) == teststring2_w); + UASSERT(!is.eof()); + is.get(); + UASSERT(is.eof()); + } + + // Test deserialize an incomplete length specifier + { + std::istringstream is(mkstr("\x53"), std::ios::binary); + EXCEPTION_CHECK(SerializationError, deSerializeWideString(is)); + } + + // Test deserialize a string with an incomplete character + { + std::istringstream is(mkstr("\x00\x07\0a\0b\0c\0d\0e\0f\0"), std::ios::binary); + EXCEPTION_CHECK(SerializationError, deSerializeWideString(is)); + } + + // Test deserialize a string with incomplete data + { + std::istringstream is(mkstr("\x00\x08\0a\0b\0c\0d\0e\0f"), std::ios::binary); + EXCEPTION_CHECK(SerializationError, deSerializeWideString(is)); + } } void TestSerialization::testSerializeLongString() @@ -127,15 +187,39 @@ void TestSerialization::testSerializeLongString() // Test character range UASSERT(serializeLongString(teststring2) == mkstr("\0\0\1\0") + teststring2); - - // Test deserialize - std::istringstream is(serializeLongString(teststring2), std::ios::binary); - UASSERT(deSerializeLongString(is) == teststring2); - UASSERT(!is.eof()); - is.get(); - UASSERT(is.eof()); } +void TestSerialization::testDeSerializeLongString() +{ + // Test deserialize + { + std::istringstream is(serializeLongString(teststring2), std::ios::binary); + UASSERT(deSerializeLongString(is) == teststring2); + UASSERT(!is.eof()); + is.get(); + UASSERT(is.eof()); + } + + // Test deserialize an incomplete length specifier + { + std::istringstream is(mkstr("\x53"), std::ios::binary); + EXCEPTION_CHECK(SerializationError, deSerializeLongString(is)); + } + + // Test deserialize a string with incomplete data + { + std::istringstream is(mkstr("\x00\x00\x00\x05 abc"), std::ios::binary); + EXCEPTION_CHECK(SerializationError, deSerializeLongString(is)); + } + + // Test deserialize a string with a length too large + { + std::istringstream is(mkstr("\xFF\xFF\xFF\xFF blah"), std::ios::binary); + EXCEPTION_CHECK(SerializationError, deSerializeLongString(is)); + } +} + + void TestSerialization::testSerializeJsonString() { // Test blank string @@ -180,3 +264,386 @@ void TestSerialization::testSerializeJsonString() is.get(); UASSERT(is.eof()); } + +void TestSerialization::testSerializeHex() +{ + // Test blank string + UASSERT(serializeHexString("") == ""); + UASSERT(serializeHexString("", true) == ""); + + // Test basic string + UASSERT(serializeHexString("Hello world!") == + "48656c6c6f20776f726c6421"); + UASSERT(serializeHexString("Hello world!", true) == + "48 65 6c 6c 6f 20 77 6f 72 6c 64 21"); + + // Test binary string + UASSERT(serializeHexString(mkstr("\x00\x0a\xb0\x63\x1f\x00\xff")) == + "000ab0631f00ff"); + UASSERT(serializeHexString(mkstr("\x00\x0a\xb0\x63\x1f\x00\xff"), true) == + "00 0a b0 63 1f 00 ff"); +} + + +void TestSerialization::testStreamRead() +{ + std::string datastr( + (const char *)test_serialized_data, + sizeof(test_serialized_data)); + std::istringstream is(datastr, std::ios_base::binary); + + UASSERT(readU8(is) == 0x11); + UASSERT(readU16(is) == 0x2233); + UASSERT(readU32(is) == 0x44556677); + UASSERT(readU64(is) == 0x8899AABBCCDDEEFF); + + UASSERT(readS8(is) == -128); + UASSERT(readS16(is) == 30000); + UASSERT(readS32(is) == -6); + UASSERT(readS64(is) == -43); + + UASSERT(readF1000(is) == 53.534f); + UASSERT(readF1000(is) == -300000.32f); + UASSERT(readF1000(is) == F1000_MIN); + UASSERT(readF1000(is) == F1000_MAX); + + UASSERT(deSerializeString(is) == "foobar!"); + + UASSERT(readV2S16(is) == v2s16(500, 500)); + UASSERT(readV3S16(is) == v3s16(4207, 604, -30)); + UASSERT(readV2S32(is) == v2s32(1920, 1080)); + UASSERT(readV3S32(is) == v3s32(-400, 6400054, 290549855)); + UASSERT(readV2F1000(is) == v2f(500.656f, 350.345f)); + + UASSERT(deSerializeWideString(is) == L"\x02~woof~\x5455"); + + UASSERT(readV3F1000(is) == v3f(500, 10024.2f, -192.54f)); + UASSERT(readARGB8(is) == video::SColor(255, 128, 50, 128)); + + UASSERT(deSerializeLongString(is) == "some longer string here"); + + UASSERT(is.rdbuf()->in_avail() == 2); + UASSERT(readU16(is) == 0xF00D); + UASSERT(is.rdbuf()->in_avail() == 0); +} + + +void TestSerialization::testStreamWrite() +{ + std::ostringstream os(std::ios_base::binary); + std::string data; + + writeU8(os, 0x11); + writeU16(os, 0x2233); + writeU32(os, 0x44556677); + writeU64(os, 0x8899AABBCCDDEEFF); + + writeS8(os, -128); + writeS16(os, 30000); + writeS32(os, -6); + writeS64(os, -43); + + writeF1000(os, 53.53467f); + writeF1000(os, -300000.32f); + writeF1000(os, F1000_MIN); + writeF1000(os, F1000_MAX); + + os << serializeString("foobar!"); + + data = os.str(); + UASSERT(data.size() < sizeof(test_serialized_data)); + UASSERT(!memcmp(&data[0], test_serialized_data, data.size())); + + writeV2S16(os, v2s16(500, 500)); + writeV3S16(os, v3s16(4207, 604, -30)); + writeV2S32(os, v2s32(1920, 1080)); + writeV3S32(os, v3s32(-400, 6400054, 290549855)); + writeV2F1000(os, v2f(500.65661f, 350.34567f)); + + os << serializeWideString(L"\x02~woof~\x5455"); + + writeV3F1000(os, v3f(500, 10024.2f, -192.54f)); + writeARGB8(os, video::SColor(255, 128, 50, 128)); + + os << serializeLongString("some longer string here"); + + writeU16(os, 0xF00D); + + data = os.str(); + UASSERT(data.size() == sizeof(test_serialized_data)); + UASSERT(!memcmp(&data[0], test_serialized_data, sizeof(test_serialized_data))); +} + + +void TestSerialization::testVecPut() +{ + std::vector buf; + + putU8(&buf, 0x11); + putU16(&buf, 0x2233); + putU32(&buf, 0x44556677); + putU64(&buf, 0x8899AABBCCDDEEFF); + + putS8(&buf, -128); + putS16(&buf, 30000); + putS32(&buf, -6); + putS64(&buf, -43); + + putF1000(&buf, 53.53467f); + putF1000(&buf, -300000.32f); + putF1000(&buf, F1000_MIN); + putF1000(&buf, F1000_MAX); + + putString(&buf, "foobar!"); + + putV2S16(&buf, v2s16(500, 500)); + putV3S16(&buf, v3s16(4207, 604, -30)); + putV2S32(&buf, v2s32(1920, 1080)); + putV3S32(&buf, v3s32(-400, 6400054, 290549855)); + putV2F1000(&buf, v2f(500.65661f, 350.34567f)); + + putWideString(&buf, L"\x02~woof~\x5455"); + + putV3F1000(&buf, v3f(500, 10024.2f, -192.54f)); + putARGB8(&buf, video::SColor(255, 128, 50, 128)); + + putLongString(&buf, "some longer string here"); + + putU16(&buf, 0xF00D); + + UASSERT(buf.size() == sizeof(test_serialized_data)); + UASSERT(!memcmp(&buf[0], test_serialized_data, sizeof(test_serialized_data))); +} + + +void TestSerialization::testStringLengthLimits() +{ + std::vector buf; + std::string too_long(STRING_MAX_LEN + 1, 'A'); + std::string way_too_large(LONG_STRING_MAX_LEN + 1, 'B'); + std::wstring too_long_wide(WIDE_STRING_MAX_LEN + 1, L'C'); + + EXCEPTION_CHECK(SerializationError, putString(&buf, too_long)); + + putLongString(&buf, too_long); + too_long.resize(too_long.size() - 1); + putString(&buf, too_long); + + EXCEPTION_CHECK(SerializationError, putWideString(&buf, too_long_wide)); + too_long_wide.resize(too_long_wide.size() - 1); + putWideString(&buf, too_long_wide); +} + + +void TestSerialization::testBufReader() +{ + u8 u8_data; + u16 u16_data; + u32 u32_data; + u64 u64_data; + s8 s8_data; + s16 s16_data; + s32 s32_data; + s64 s64_data; + f32 f32_data, f32_data2, f32_data3, f32_data4; + video::SColor scolor_data; + v2s16 v2s16_data; + v3s16 v3s16_data; + v2s32 v2s32_data; + v3s32 v3s32_data; + v2f v2f_data; + v3f v3f_data; + std::string string_data; + std::wstring widestring_data; + std::string longstring_data; + u8 raw_data[10] = {0}; + + BufReader buf(test_serialized_data, sizeof(test_serialized_data)); + + // Try reading data like normal + UASSERT(buf.getU8() == 0x11); + UASSERT(buf.getU16() == 0x2233); + UASSERT(buf.getU32() == 0x44556677); + UASSERT(buf.getU64() == 0x8899AABBCCDDEEFF); + UASSERT(buf.getS8() == -128); + UASSERT(buf.getS16() == 30000); + UASSERT(buf.getS32() == -6); + UASSERT(buf.getS64() == -43); + UASSERT(buf.getF1000() == 53.534f); + UASSERT(buf.getF1000() == -300000.32f); + UASSERT(buf.getF1000() == F1000_MIN); + UASSERT(buf.getF1000() == F1000_MAX); + UASSERT(buf.getString() == "foobar!"); + UASSERT(buf.getV2S16() == v2s16(500, 500)); + UASSERT(buf.getV3S16() == v3s16(4207, 604, -30)); + UASSERT(buf.getV2S32() == v2s32(1920, 1080)); + UASSERT(buf.getV3S32() == v3s32(-400, 6400054, 290549855)); + UASSERT(buf.getV2F1000() == v2f(500.656f, 350.345f)); + UASSERT(buf.getWideString() == L"\x02~woof~\x5455"); + UASSERT(buf.getV3F1000() == v3f(500, 10024.2f, -192.54f)); + UASSERT(buf.getARGB8() == video::SColor(255, 128, 50, 128)); + UASSERT(buf.getLongString() == "some longer string here"); + + // Verify the offset and data is unchanged after a failed read + size_t orig_pos = buf.pos; + u32_data = 0; + UASSERT(buf.getU32NoEx(&u32_data) == false); + UASSERT(buf.pos == orig_pos); + UASSERT(u32_data == 0); + + // Now try the same for a failed string read + UASSERT(buf.getStringNoEx(&string_data) == false); + UASSERT(buf.pos == orig_pos); + UASSERT(string_data == ""); + + // Now try the same for a failed string read + UASSERT(buf.getWideStringNoEx(&widestring_data) == false); + UASSERT(buf.pos == orig_pos); + UASSERT(widestring_data == L""); + + UASSERT(buf.getU16() == 0xF00D); + + UASSERT(buf.remaining() == 0); + + // Check to make sure these each blow exceptions as they're supposed to + EXCEPTION_CHECK(SerializationError, buf.getU8()); + EXCEPTION_CHECK(SerializationError, buf.getU16()); + EXCEPTION_CHECK(SerializationError, buf.getU32()); + EXCEPTION_CHECK(SerializationError, buf.getU64()); + + EXCEPTION_CHECK(SerializationError, buf.getS8()); + EXCEPTION_CHECK(SerializationError, buf.getS16()); + EXCEPTION_CHECK(SerializationError, buf.getS32()); + EXCEPTION_CHECK(SerializationError, buf.getS64()); + + EXCEPTION_CHECK(SerializationError, buf.getF1000()); + EXCEPTION_CHECK(SerializationError, buf.getARGB8()); + + EXCEPTION_CHECK(SerializationError, buf.getV2S16()); + EXCEPTION_CHECK(SerializationError, buf.getV3S16()); + EXCEPTION_CHECK(SerializationError, buf.getV2S32()); + EXCEPTION_CHECK(SerializationError, buf.getV3S32()); + EXCEPTION_CHECK(SerializationError, buf.getV2F1000()); + EXCEPTION_CHECK(SerializationError, buf.getV3F1000()); + + EXCEPTION_CHECK(SerializationError, buf.getString()); + EXCEPTION_CHECK(SerializationError, buf.getWideString()); + EXCEPTION_CHECK(SerializationError, buf.getLongString()); + EXCEPTION_CHECK(SerializationError, + buf.getRawData(raw_data, sizeof(raw_data))); + + // See if we can skip backwards + buf.pos = 5; + UASSERT(buf.getRawDataNoEx(raw_data, 3) == true); + UASSERT(raw_data[0] == 0x66); + UASSERT(raw_data[1] == 0x77); + UASSERT(raw_data[2] == 0x88); + + UASSERT(buf.getU32() == 0x99AABBCC); + UASSERT(buf.pos == 12); + + // Now let's try it all over again using the NoEx variants + buf.pos = 0; + + UASSERT(buf.getU8NoEx(&u8_data)); + UASSERT(buf.getU16NoEx(&u16_data)); + UASSERT(buf.getU32NoEx(&u32_data)); + UASSERT(buf.getU64NoEx(&u64_data)); + + UASSERT(buf.getS8NoEx(&s8_data)); + UASSERT(buf.getS16NoEx(&s16_data)); + UASSERT(buf.getS32NoEx(&s32_data)); + UASSERT(buf.getS64NoEx(&s64_data)); + + UASSERT(buf.getF1000NoEx(&f32_data)); + UASSERT(buf.getF1000NoEx(&f32_data2)); + UASSERT(buf.getF1000NoEx(&f32_data3)); + UASSERT(buf.getF1000NoEx(&f32_data4)); + + UASSERT(buf.getStringNoEx(&string_data)); + UASSERT(buf.getV2S16NoEx(&v2s16_data)); + UASSERT(buf.getV3S16NoEx(&v3s16_data)); + UASSERT(buf.getV2S32NoEx(&v2s32_data)); + UASSERT(buf.getV3S32NoEx(&v3s32_data)); + UASSERT(buf.getV2F1000NoEx(&v2f_data)); + UASSERT(buf.getWideStringNoEx(&widestring_data)); + UASSERT(buf.getV3F1000NoEx(&v3f_data)); + UASSERT(buf.getARGB8NoEx(&scolor_data)); + + UASSERT(buf.getLongStringNoEx(&longstring_data)); + + // and make sure we got the correct data + UASSERT(u8_data == 0x11); + UASSERT(u16_data == 0x2233); + UASSERT(u32_data == 0x44556677); + UASSERT(u64_data == 0x8899AABBCCDDEEFF); + UASSERT(s8_data == -128); + UASSERT(s16_data == 30000); + UASSERT(s32_data == -6); + UASSERT(s64_data == -43); + UASSERT(f32_data == 53.534f); + UASSERT(f32_data2 == -300000.32f); + UASSERT(f32_data3 == F1000_MIN); + UASSERT(f32_data4 == F1000_MAX); + UASSERT(string_data == "foobar!"); + UASSERT(v2s16_data == v2s16(500, 500)); + UASSERT(v3s16_data == v3s16(4207, 604, -30)); + UASSERT(v2s32_data == v2s32(1920, 1080)); + UASSERT(v3s32_data == v3s32(-400, 6400054, 290549855)); + UASSERT(v2f_data == v2f(500.656f, 350.345f)); + UASSERT(widestring_data == L"\x02~woof~\x5455"); + UASSERT(v3f_data == v3f(500, 10024.2f, -192.54f)); + UASSERT(scolor_data == video::SColor(255, 128, 50, 128)); + UASSERT(longstring_data == "some longer string here"); + + UASSERT(buf.remaining() == 2); + UASSERT(buf.getRawDataNoEx(raw_data, 3) == false); + UASSERT(buf.remaining() == 2); + UASSERT(buf.getRawDataNoEx(raw_data, 2) == true); + UASSERT(raw_data[0] == 0xF0); + UASSERT(raw_data[1] == 0x0D); + UASSERT(buf.remaining() == 0); + + // Make sure no more available data causes a failure + UASSERT(!buf.getU8NoEx(&u8_data)); + UASSERT(!buf.getU16NoEx(&u16_data)); + UASSERT(!buf.getU32NoEx(&u32_data)); + UASSERT(!buf.getU64NoEx(&u64_data)); + + UASSERT(!buf.getS8NoEx(&s8_data)); + UASSERT(!buf.getS16NoEx(&s16_data)); + UASSERT(!buf.getS32NoEx(&s32_data)); + UASSERT(!buf.getS64NoEx(&s64_data)); + + UASSERT(!buf.getF1000NoEx(&f32_data)); + UASSERT(!buf.getARGB8NoEx(&scolor_data)); + + UASSERT(!buf.getV2S16NoEx(&v2s16_data)); + UASSERT(!buf.getV3S16NoEx(&v3s16_data)); + UASSERT(!buf.getV2S32NoEx(&v2s32_data)); + UASSERT(!buf.getV3S32NoEx(&v3s32_data)); + UASSERT(!buf.getV2F1000NoEx(&v2f_data)); + UASSERT(!buf.getV3F1000NoEx(&v3f_data)); + + UASSERT(!buf.getStringNoEx(&string_data)); + UASSERT(!buf.getWideStringNoEx(&widestring_data)); + UASSERT(!buf.getLongStringNoEx(&longstring_data)); + UASSERT(!buf.getRawDataNoEx(raw_data, sizeof(raw_data))); +} + + +const u8 TestSerialization::test_serialized_data[12 * 13] = { + 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, + 0xdd, 0xee, 0xff, 0x80, 0x75, 0x30, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0x00, 0x00, 0xd1, 0x1e, 0xee, 0x1e, + 0x5b, 0xc0, 0x80, 0x00, 0x02, 0x80, 0x7F, 0xFF, 0xFD, 0x80, 0x00, 0x07, + 0x66, 0x6f, 0x6f, 0x62, 0x61, 0x72, 0x21, 0x01, 0xf4, 0x01, 0xf4, 0x10, + 0x6f, 0x02, 0x5c, 0xff, 0xe2, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x04, + 0x38, 0xff, 0xff, 0xfe, 0x70, 0x00, 0x61, 0xa8, 0x36, 0x11, 0x51, 0x70, + 0x5f, 0x00, 0x07, 0xa3, 0xb0, 0x00, 0x05, 0x58, 0x89, 0x00, 0x08, 0x00, + 0x02, 0x00, 0x7e, 0x00, 0x77, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x66, 0x00, + 0x7e, 0x54, 0x55, 0x00, 0x07, 0xa1, 0x20, 0x00, 0x98, 0xf5, 0x08, 0xff, + 0xfd, 0x0f, 0xe4, 0xff, 0x80, 0x32, 0x80, 0x00, 0x00, 0x00, 0x17, 0x73, + 0x6f, 0x6d, 0x65, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x65, 0x72, 0x20, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x65, 0x72, 0x65, 0xF0, 0x0D, +}; diff --git a/src/unittest/test_threading.cpp b/src/unittest/test_threading.cpp new file mode 100644 index 00000000..3d526ac1 --- /dev/null +++ b/src/unittest/test_threading.cpp @@ -0,0 +1,182 @@ +/* +Minetest +Copyright (C) 2013 celeron55, Perttu Ahola + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 3.0 of the License, or +(at your option) any later version. + +This program 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 Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "test.h" + +#include "threading/atomic.h" +#include "threading/semaphore.h" +#include "threading/thread.h" + + +class TestThreading : public TestBase { +public: + TestThreading() { TestManager::registerTestModule(this); } + const char *getName() { return "TestThreading"; } + void runTests(IGameDef *gamedef); + + void testStartStopWait(); + void testThreadKill(); + void testAtomicSemaphoreThread(); +}; + +static TestThreading g_test_instance; + +void TestThreading::runTests(IGameDef *gamedef) +{ + TEST(testStartStopWait); + TEST(testThreadKill); + TEST(testAtomicSemaphoreThread); +} + +class SimpleTestThread : public Thread { +public: + SimpleTestThread(unsigned int interval) : + Thread("SimpleTest"), + m_interval(interval) + { + } + +private: + void *run() + { + void *retval = this; + + if (isCurrentThread() == false) + retval = (void *)0xBAD; + + while (!stopRequested()) + sleep_ms(m_interval); + + return retval; + } + + unsigned int m_interval; +}; + +void TestThreading::testStartStopWait() +{ + void *thread_retval; + SimpleTestThread *thread = new SimpleTestThread(25); + + // Try this a couple times, since a Thread should be reusable after waiting + for (size_t i = 0; i != 5; i++) { + // Can't wait() on a joined, stopped thread + UASSERT(thread->wait() == false); + + // start() should work the first time, but not the second. + UASSERT(thread->start() == true); + UASSERT(thread->start() == false); + + UASSERT(thread->isRunning() == true); + UASSERT(thread->isCurrentThread() == false); + + // Let it loop a few times... + sleep_ms(70); + + // It's still running, so the return value shouldn't be available to us. + UASSERT(thread->getReturnValue(&thread_retval) == false); + + // stop() should always succeed + UASSERT(thread->stop() == true); + + // wait() only needs to wait the first time - the other two are no-ops. + UASSERT(thread->wait() == true); + UASSERT(thread->wait() == false); + UASSERT(thread->wait() == false); + + // Now that the thread is stopped, we should be able to get the + // return value, and it should be the object itself. + thread_retval = NULL; + UASSERT(thread->getReturnValue(&thread_retval) == true); + UASSERT(thread_retval == thread); + } + + delete thread; +} + + +void TestThreading::testThreadKill() +{ + SimpleTestThread *thread = new SimpleTestThread(300); + + UASSERT(thread->start() == true); + + // kill()ing is quite violent, so let's make sure our victim is sleeping + // before we do this... so we don't corrupt the rest of the program's state + sleep_ms(100); + UASSERT(thread->kill() == true); + + // The state of the thread object should be reset if all went well + UASSERT(thread->isRunning() == false); + UASSERT(thread->start() == true); + UASSERT(thread->stop() == true); + UASSERT(thread->wait() == true); + + // kill() after already waiting should fail. + UASSERT(thread->kill() == false); + + delete thread; +} + + +class AtomicTestThread : public Thread { +public: + AtomicTestThread(Atomic &v, Semaphore &trigger) : + Thread("AtomicTest"), + val(v), + trigger(trigger) + { + } + +private: + void *run() + { + trigger.wait(); + for (u32 i = 0; i < 0x10000; ++i) + ++val; + return NULL; + } + + Atomic &val; + Semaphore &trigger; +}; + + +void TestThreading::testAtomicSemaphoreThread() +{ + Atomic val; + Semaphore trigger; + static const u8 num_threads = 4; + + AtomicTestThread *threads[num_threads]; + for (u8 i = 0; i < num_threads; ++i) { + threads[i] = new AtomicTestThread(val, trigger); + UASSERT(threads[i]->start()); + } + + trigger.post(num_threads); + + for (u8 i = 0; i < num_threads; ++i) { + threads[i]->wait(); + delete threads[i]; + } + + UASSERT(val == num_threads * 0x10000); +} + diff --git a/src/unittest/test_utilities.cpp b/src/unittest/test_utilities.cpp index 7c39c73d..f8a5ed78 100644 --- a/src/unittest/test_utilities.cpp +++ b/src/unittest/test_utilities.cpp @@ -37,11 +37,13 @@ public: void testUrlEncode(); void testUrlDecode(); void testPadString(); + void testStartsWith(); void testStrEqual(); void testStringTrim(); void testStrToIntConversion(); void testStringReplace(); void testStringAllowed(); + void testUTF8(); void testWrapRows(); void testIsNumber(); void testIsPowerOfTwo(); @@ -60,11 +62,13 @@ void TestUtilities::runTests(IGameDef *gamedef) TEST(testUrlEncode); TEST(testUrlDecode); TEST(testPadString); + TEST(testStartsWith); TEST(testStrEqual); TEST(testStringTrim); TEST(testStrToIntConversion); TEST(testStringReplace); TEST(testStringAllowed); + TEST(testUTF8); TEST(testWrapRows); TEST(testIsNumber); TEST(testIsPowerOfTwo); @@ -123,6 +127,8 @@ void TestUtilities::testLowercase() void TestUtilities::testTrim() { + UASSERT(trim("") == ""); + UASSERT(trim("dirt_with_grass") == "dirt_with_grass"); UASSERT(trim("\n \t\r Foo bAR \r\n\t\t ") == "Foo bAR"); UASSERT(trim("\n \t\r \r\n\t\t ") == ""); } @@ -169,6 +175,19 @@ void TestUtilities::testPadString() UASSERT(padStringRight("hello", 8) == "hello "); } +void TestUtilities::testStartsWith() +{ + UASSERT(str_starts_with(std::string(), std::string()) == true); + UASSERT(str_starts_with(std::string("the sharp pickaxe"), + std::string()) == true); + UASSERT(str_starts_with(std::string("the sharp pickaxe"), + std::string("the")) == true); + UASSERT(str_starts_with(std::string("the sharp pickaxe"), + std::string("The")) == false); + UASSERT(str_starts_with(std::string("the sharp pickaxe"), + std::string("The"), true) == true); + UASSERT(str_starts_with(std::string("T"), std::string("The")) == false); +} void TestUtilities::testStrEqual() { @@ -213,10 +232,34 @@ void TestUtilities::testStringAllowed() UASSERT(string_allowed_blacklist("hello123", "123") == false); } +void TestUtilities::testUTF8() +{ + UASSERT(wide_to_utf8(utf8_to_wide("")) == ""); + UASSERT(wide_to_utf8(utf8_to_wide("the shovel dug a crumbly node!")) + == "the shovel dug a crumbly node!"); +} void TestUtilities::testWrapRows() { UASSERT(wrap_rows("12345678",4) == "1234\n5678"); + // test that wrap_rows doesn't wrap inside multibyte sequences + { + const unsigned char s[] = { + 0x2f, 0x68, 0x6f, 0x6d, 0x65, 0x2f, 0x72, 0x61, 0x70, 0x74, 0x6f, + 0x72, 0x2f, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0x2f, + 0x6d, 0x69, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x62, 0x69, + 0x6e, 0x2f, 0x2e, 0x2e, 0}; + std::string str((char *)s); + UASSERT(utf8_to_wide(wrap_rows(str, 20)) != L""); + }; + { + const unsigned char s[] = { + 0x74, 0x65, 0x73, 0x74, 0x20, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x81, + 0xd1, 0x82, 0x20, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, + 0x20, 0xd1, 0x82, 0xd0, 0xb5, 0xd1, 0x81, 0xd1, 0x82, 0}; + std::string str((char *)s); + UASSERT(utf8_to_wide(wrap_rows(str, 8)) != L""); + } } @@ -239,7 +282,7 @@ void TestUtilities::testIsPowerOfTwo() UASSERT(is_power_of_two((1 << exponent)) == true); UASSERT(is_power_of_two((1 << exponent) + 1) == false); } - UASSERT(is_power_of_two((u32)-1) == false); + UASSERT(is_power_of_two(U32_MAX) == false); } void TestUtilities::testMyround() diff --git a/src/util/auth.cpp b/src/util/auth.cpp index 3d145865..c474a0cd 100644 --- a/src/util/auth.cpp +++ b/src/util/auth.cpp @@ -24,6 +24,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "sha1.h" #include "srp.h" #include "string.h" +#include "debug.h" // Get an sha-1 hash of the player's name combined with // the password entered. That's what the server uses as @@ -50,16 +51,17 @@ void getSRPVerifier(const std::string &name, char **bytes_v, size_t *len_v) { std::string n_name = lowercase(name); - srp_create_salted_verification_key(SRP_SHA256, SRP_NG_2048, + SRP_Result res = srp_create_salted_verification_key(SRP_SHA256, SRP_NG_2048, n_name.c_str(), (const unsigned char *)password.c_str(), password.size(), (unsigned char **)salt, salt_len, (unsigned char **)bytes_v, len_v, NULL, NULL); + FATAL_ERROR_IF(res != SRP_OK, "Couldn't create salted SRP verifier"); } // Get a db-ready SRP verifier -// The salt param is only modifyable by this method so that you can free it -// if it was allocated. You shouldn't use it for other purposes, as you will -// need the contents of salt_len too. +// If the salt param is NULL, one is automatically generated. +// Please free() it afterwards. You shouldn't use it for other purposes, +// as you will need the contents of salt_len too. inline static std::string getSRPVerifier(const std::string &name, const std::string &password, char ** salt, size_t salt_len) { @@ -67,6 +69,7 @@ inline static std::string getSRPVerifier(const std::string &name, size_t len_v; getSRPVerifier(name, password, salt, &salt_len, &bytes_v, &len_v); + assert(*salt); // usually, srp_create_salted_verification_key promises us to return SRP_ERR when *salt == NULL std::string ret_val = encodeSRPVerifier(std::string(bytes_v, len_v), std::string(*salt, salt_len)); free(bytes_v); diff --git a/src/util/auth.h b/src/util/auth.h index 04972e86..d366d57a 100644 --- a/src/util/auth.h +++ b/src/util/auth.h @@ -34,4 +34,4 @@ std::string encodeSRPVerifier(const std::string &verifier, bool decodeSRPVerifier(const std::string &enc_pwd, std::string *salt, std::string *bytes_v); -#endif \ No newline at end of file +#endif diff --git a/src/logoutputbuffer.h b/src/util/auth.h~HEAD similarity index 51% rename from src/logoutputbuffer.h rename to src/util/auth.h~HEAD index 896e6e82..04972e86 100644 --- a/src/logoutputbuffer.h +++ b/src/util/auth.h~HEAD @@ -1,6 +1,6 @@ /* Minetest -Copyright (C) 2013 celeron55, Perttu Ahola +Copyright (C) 2015 est31 This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by @@ -17,42 +17,21 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef LOGOUTPUTBUFFER_HEADER -#define LOGOUTPUTBUFFER_HEADER +#ifndef AUTH_H +#define AUTH_H -#include "log.h" -#include - -class LogOutputBuffer : public ILogOutput -{ -public: - LogOutputBuffer(LogMessageLevel maxlev) - { - log_add_output(this, maxlev); - } - ~LogOutputBuffer() - { - log_remove_output(this); - } - virtual void printLog(const std::string &line) - { - m_buf.push(line); - } - std::string get() - { - if(empty()) - return ""; - std::string s = m_buf.front(); - m_buf.pop(); - return s; - } - bool empty() - { - return m_buf.empty(); - } -private: - std::queue m_buf; -}; - -#endif +std::string translatePassword(const std::string &name, + const std::string &password); +void getSRPVerifier(const std::string &name, + const std::string &password, char **salt, size_t *salt_len, + char **bytes_v, size_t *len_v); +std::string getSRPVerifier(const std::string &name, + const std::string &password); +std::string getSRPVerifier(const std::string &name, + const std::string &password, const std::string &salt); +std::string encodeSRPVerifier(const std::string &verifier, + const std::string &salt); +bool decodeSRPVerifier(const std::string &enc_pwd, + std::string *salt, std::string *bytes_v); +#endif \ No newline at end of file diff --git a/src/util/container.h b/src/util/container.h index c3605d8f..8cfddd10 100644 --- a/src/util/container.h +++ b/src/util/container.h @@ -22,9 +22,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "../irrlichttypes.h" #include "../exceptions.h" -#include "../jthread/jmutex.h" -#include "../jthread/jmutexautolock.h" -#include "../jthread/jsemaphore.h" +#include "../threading/mutex.h" +#include "../threading/mutex_auto_lock.h" +#include "../threading/semaphore.h" #include #include #include @@ -81,111 +81,47 @@ template class MutexedMap { public: - MutexedMap() - { - } + MutexedMap() {} void set(const Key &name, const Value &value) { - JMutexAutoLock lock(m_mutex); - + MutexAutoLock lock(m_mutex); m_values[name] = value; } - bool get(const Key &name, Value *result) + bool get(const Key &name, Value *result) const { - JMutexAutoLock lock(m_mutex); - - typename std::map::iterator n; - n = m_values.find(name); - - if(n == m_values.end()) + MutexAutoLock lock(m_mutex); + typename std::map::const_iterator n = + m_values.find(name); + if (n == m_values.end()) return false; - - if(result != NULL) + if (result) *result = n->second; - return true; } - std::vector getValues() + std::vector getValues() const { + MutexAutoLock lock(m_mutex); std::vector result; - for(typename std::map::iterator - i = m_values.begin(); - i != m_values.end(); ++i){ - result.push_back(i->second); + for (typename std::map::const_iterator + it = m_values.begin(); + it != m_values.end(); ++it){ + result.push_back(it->second); } return result; } - void clear () - { - m_values.clear(); - } + void clear() { m_values.clear(); } private: std::map m_values; - JMutex m_mutex; + mutable Mutex m_mutex; }; -/* -Generates ids for comparable values. -Id=0 is reserved for "no value". -Is fast at: -- Returning value by id (very fast) -- Returning id by value -- Generating a new id for a value - -Is not able to: -- Remove an id/value pair (is possible to implement but slow) -*/ -template -class MutexedIdGenerator -{ -public: - MutexedIdGenerator() - { - } - - // Returns true if found - bool getValue(u32 id, T &value) - { - if(id == 0) - return false; - JMutexAutoLock lock(m_mutex); - if(m_id_to_value.size() < id) - return false; - value = m_id_to_value[id-1]; - return true; - } - - // If id exists for value, returns the id. - // Otherwise generates an id for the value. - u32 getId(const T &value) - { - JMutexAutoLock lock(m_mutex); - typename std::map::iterator n; - n = m_value_to_id.find(value); - if(n != m_value_to_id.end()) - return n->second; - m_id_to_value.push_back(value); - u32 new_id = m_id_to_value.size(); - m_value_to_id.insert(value, new_id); - return new_id; - } - -private: - JMutex m_mutex; - // Values are stored here at id-1 position (id 1 = [0]) - std::vector m_id_to_value; - std::map m_value_to_id; -}; - -/* -Thread-safe FIFO queue (well, actually a FILO also) -*/ +// Thread-safe Double-ended queue template class MutexedQueue @@ -194,19 +130,18 @@ public: template friend class RequestQueue; - MutexedQueue() + MutexedQueue() {} + bool empty() const { + MutexAutoLock lock(m_mutex); + return m_queue.empty(); } - bool empty() - { - JMutexAutoLock lock(m_mutex); - return (m_queue.size() == 0); - } + void push_back(T t) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); m_queue.push_back(t); - m_size.Post(); + m_signal.post(); } /* this version of pop_front returns a empty element of T on timeout. @@ -214,37 +149,35 @@ public: */ T pop_frontNoEx(u32 wait_time_max_ms) { - if (m_size.Wait(wait_time_max_ms)) { - JMutexAutoLock lock(m_mutex); + if (m_signal.wait(wait_time_max_ms)) { + MutexAutoLock lock(m_mutex); T t = m_queue.front(); m_queue.pop_front(); return t; - } - else { + } else { return T(); } } T pop_front(u32 wait_time_max_ms) { - if (m_size.Wait(wait_time_max_ms)) { - JMutexAutoLock lock(m_mutex); + if (m_signal.wait(wait_time_max_ms)) { + MutexAutoLock lock(m_mutex); T t = m_queue.front(); m_queue.pop_front(); return t; - } - else { + } else { throw ItemNotFoundException("MutexedQueue: queue is empty"); } } T pop_frontNoEx() { - m_size.Wait(); + m_signal.wait(); - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); T t = m_queue.front(); m_queue.pop_front(); @@ -253,14 +186,13 @@ public: T pop_back(u32 wait_time_max_ms=0) { - if (m_size.Wait(wait_time_max_ms)) { - JMutexAutoLock lock(m_mutex); + if (m_signal.wait(wait_time_max_ms)) { + MutexAutoLock lock(m_mutex); T t = m_queue.back(); m_queue.pop_back(); return t; - } - else { + } else { throw ItemNotFoundException("MutexedQueue: queue is empty"); } } @@ -268,25 +200,24 @@ public: /* this version of pop_back returns a empty element of T on timeout. * Make sure default constructor of T creates a recognizable "empty" element */ - T pop_backNoEx(u32 wait_time_max_ms=0) + T pop_backNoEx(u32 wait_time_max_ms) { - if (m_size.Wait(wait_time_max_ms)) { - JMutexAutoLock lock(m_mutex); + if (m_signal.wait(wait_time_max_ms)) { + MutexAutoLock lock(m_mutex); T t = m_queue.back(); m_queue.pop_back(); return t; - } - else { + } else { return T(); } } T pop_backNoEx() { - m_size.Wait(); + m_signal.wait(); - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); T t = m_queue.back(); m_queue.pop_back(); @@ -294,19 +225,82 @@ public: } protected: - JMutex & getMutex() - { - return m_mutex; - } + Mutex &getMutex() { return m_mutex; } - std::deque & getQueue() - { - return m_queue; - } + std::deque &getQueue() { return m_queue; } std::deque m_queue; - JMutex m_mutex; - JSemaphore m_size; + mutable Mutex m_mutex; + Semaphore m_signal; +}; + +template +class LRUCache +{ +public: + LRUCache(size_t limit, void (*cache_miss)(void *data, const K &key, V *dest), + void *data) + { + m_limit = limit; + m_cache_miss = cache_miss; + m_cache_miss_data = data; + } + + void setLimit(size_t limit) + { + m_limit = limit; + invalidate(); + } + + void invalidate() + { + m_map.clear(); + m_queue.clear(); + } + + const V *lookupCache(K key) + { + typename cache_type::iterator it = m_map.find(key); + V *ret; + if (it != m_map.end()) { + // found! + + cache_entry_t &entry = it->second; + + ret = &entry.second; + + // update the usage information + m_queue.erase(entry.first); + m_queue.push_front(key); + entry.first = m_queue.begin(); + } else { + // cache miss -- enter into cache + cache_entry_t &entry = + m_map[key]; + ret = &entry.second; + m_cache_miss(m_cache_miss_data, key, &entry.second); + + // delete old entries + if (m_queue.size() == m_limit) { + const K &id = m_queue.back(); + m_map.erase(id); + m_queue.pop_back(); + } + + m_queue.push_front(key); + entry.first = m_queue.begin(); + } + return ret; + } +private: + void (*m_cache_miss)(void *data, const K &key, V *dest); + void *m_cache_miss_data; + size_t m_limit; + typedef typename std::template pair::iterator, V> cache_entry_t; + typedef std::template map cache_type; + cache_type m_map; + // we can't use std::deque here, because its iterators get invalidated + std::list m_queue; }; #endif diff --git a/src/util/numeric.cpp b/src/util/numeric.cpp index 36abe971..19135bc3 100644 --- a/src/util/numeric.cpp +++ b/src/util/numeric.cpp @@ -23,13 +23,17 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "log.h" #include "../constants.h" // BS, MAP_BLOCKSIZE #include "../noise.h" // PseudoRandom, PcgRandom +#include "../threading/mutex_auto_lock.h" #include #include std::map > FacePositionCache::m_cache; +Mutex FacePositionCache::m_cache_mutex; // Calculate the borders of a "d-radius" cube +// TODO: Make it work without mutex and data races, probably thread-local std::vector FacePositionCache::getFacePositions(u16 d) { + MutexAutoLock cachelock(m_cache_mutex); if (m_cache.find(d) != m_cache.end()) return m_cache[d]; diff --git a/src/util/numeric.h b/src/util/numeric.h index c2ff15c4..a6dada30 100644 --- a/src/util/numeric.h +++ b/src/util/numeric.h @@ -20,14 +20,15 @@ with this program; if not, write to the Free Software Foundation, Inc., #ifndef UTIL_NUMERIC_HEADER #define UTIL_NUMERIC_HEADER +#include "../basicmacros.h" #include "../irrlichttypes.h" #include "../irr_v2d.h" #include "../irr_v3d.h" #include "../irr_aabb3d.h" +#include "../threading/mutex.h" #include #include #include -#include /* @@ -41,6 +42,7 @@ public: private: static void generateFacePosition(u16 d); static std::map > m_cache; + static Mutex m_cache_mutex; }; class IndentationRaiser @@ -164,9 +166,6 @@ inline v3s16 arealim(v3s16 p, s16 d) return p; } -#define ARRLEN(x) (sizeof(x) / sizeof((x)[0])) -#define CONTAINS(c, v) (std::find((c).begin(), (c).end(), (v)) != (c).end()) - // The naive swap performs better than the xor version #define SWAP(t, x, y) do { \ t temp = x; \ @@ -276,12 +275,6 @@ u64 murmur_hash_64_ua(const void *key, int len, unsigned int seed); bool isBlockInSight(v3s16 blockpos_b, v3f camera_pos, v3f camera_dir, f32 camera_fov, f32 range, f32 *distance_ptr=NULL); -/* - Some helper stuff -*/ -#define MYMIN(a,b) ((a)<(b)?(a):(b)) -#define MYMAX(a,b) ((a)>(b)?(a):(b)) - /* Returns nearest 32-bit integer for given floating point number. and in VC++ don't provide round(). diff --git a/src/util/pointer.h b/src/util/pointer.h index 1e4e3aba..78e31ebe 100644 --- a/src/util/pointer.h +++ b/src/util/pointer.h @@ -178,6 +178,14 @@ private: unsigned int m_size; }; +/************************************************ + * !!! W A R N I N G !!! * + * !!! A C H T U N G !!! * + * * + * This smart pointer class is NOT thread safe. * + * ONLY use in a single-threaded context! * + * * + ************************************************/ template class SharedBuffer { diff --git a/src/util/serialize.cpp b/src/util/serialize.cpp index 0e75588f..3052b6f8 100644 --- a/src/util/serialize.cpp +++ b/src/util/serialize.cpp @@ -28,79 +28,179 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include -// Creates a string with the length as the first two bytes +SerializationError eof_ser_err("Attempted read past end of data"); + +//// +//// BufReader +//// + +bool BufReader::getStringNoEx(std::string *val) +{ + u16 num_chars; + if (!getU16NoEx(&num_chars)) + return false; + + if (pos + num_chars > size) { + pos -= sizeof(num_chars); + return false; + } + + val->assign((const char *)data + pos, num_chars); + pos += num_chars; + + return true; +} + +bool BufReader::getWideStringNoEx(std::wstring *val) +{ + u16 num_chars; + if (!getU16NoEx(&num_chars)) + return false; + + if (pos + num_chars * 2 > size) { + pos -= sizeof(num_chars); + return false; + } + + for (size_t i = 0; i != num_chars; i++) { + val->push_back(readU16(data + pos)); + pos += 2; + } + + return true; +} + +bool BufReader::getLongStringNoEx(std::string *val) +{ + u32 num_chars; + if (!getU32NoEx(&num_chars)) + return false; + + if (pos + num_chars > size) { + pos -= sizeof(num_chars); + return false; + } + + val->assign((const char *)data + pos, num_chars); + pos += num_chars; + + return true; +} + +bool BufReader::getRawDataNoEx(void *val, size_t len) +{ + if (pos + len > size) + return false; + + memcpy(val, data + pos, len); + pos += len; + + return true; +} + + +//// +//// String +//// + std::string serializeString(const std::string &plain) { - if(plain.size() > 65535) - throw SerializationError("String too long for serializeString"); - char buf[2]; - writeU16((u8*)&buf[0], plain.size()); std::string s; + char buf[2]; + + if (plain.size() > STRING_MAX_LEN) + throw SerializationError("String too long for serializeString"); + + writeU16((u8 *)&buf[0], plain.size()); s.append(buf, 2); + s.append(plain); return s; } -// Creates a string with the length as the first two bytes from wide string -std::string serializeWideString(const std::wstring &plain) -{ - if(plain.size() > 65535) - throw SerializationError("String too long for serializeString"); - char buf[2]; - writeU16((u8*)buf, plain.size()); - std::string s; - s.append(buf, 2); - for(u32 i=0; i buf2(s_size); is.read(&buf2[0], s_size); + if (is.gcount() != s_size) + throw SerializationError("deSerializeString: couldn't read all chars"); + s.reserve(s_size); s.append(&buf2[0], s_size); return s; } -// Reads a wide string with the length as the first two bytes +//// +//// Wide String +//// + +std::string serializeWideString(const std::wstring &plain) +{ + std::string s; + char buf[2]; + + if (plain.size() > WIDE_STRING_MAX_LEN) + throw SerializationError("String too long for serializeWideString"); + + writeU16((u8 *)buf, plain.size()); + s.append(buf, 2); + + for (u32 i = 0; i < plain.size(); i++) { + writeU16((u8 *)buf, plain[i]); + s.append(buf, 2); + } + return s; +} + std::wstring deSerializeWideString(std::istream &is) { - char buf[2]; - is.read(buf, 2); - if(is.gcount() != 2) - throw SerializationError("deSerializeString: size not read"); - u16 s_size = readU16((u8*)buf); std::wstring s; - if(s_size == 0) + char buf[2]; + + is.read(buf, 2); + if (is.gcount() != 2) + throw SerializationError("deSerializeWideString: size not read"); + + u16 s_size = readU16((u8 *)buf); + if (s_size == 0) return s; + s.reserve(s_size); - for(u32 i=0; i LONG_STRING_MAX_LEN) + throw SerializationError("String too long for serializeLongString"); + writeU32((u8*)&buf[0], plain.size()); std::string s; s.append(buf, 4); @@ -108,62 +208,88 @@ std::string serializeLongString(const std::string &plain) return s; } -// Reads a string with the length as the first four bytes std::string deSerializeLongString(std::istream &is) { - char buf[4]; - is.read(buf, 4); - if(is.gcount() != 4) - throw SerializationError("deSerializeLongString: size not read"); - u32 s_size = readU32((u8*)buf); std::string s; - if(s_size == 0) + char buf[4]; + + is.read(buf, 4); + if (is.gcount() != 4) + throw SerializationError("deSerializeLongString: size not read"); + + u32 s_size = readU32((u8 *)buf); + if (s_size == 0) return s; + + // We don't really want a remote attacker to force us to allocate 4GB... + if (s_size > LONG_STRING_MAX_LEN) { + throw SerializationError("deSerializeLongString: " + "string too long: " + itos(s_size) + " bytes"); + } + Buffer buf2(s_size); is.read(&buf2[0], s_size); + if (is.gcount() != s_size) + throw SerializationError("deSerializeLongString: couldn't read all chars"); + s.reserve(s_size); s.append(&buf2[0], s_size); return s; } -// Creates a string encoded in JSON format (almost equivalent to a C string literal) +//// +//// JSON +//// + std::string serializeJsonString(const std::string &plain) { std::ostringstream os(std::ios::binary); - os<<"\""; - for(size_t i = 0; i < plain.size(); i++) - { + os << "\""; + + for (size_t i = 0; i < plain.size(); i++) { char c = plain[i]; - switch(c) - { - case '"': os<<"\\\""; break; - case '\\': os<<"\\\\"; break; - case '/': os<<"\\/"; break; - case '\b': os<<"\\b"; break; - case '\f': os<<"\\f"; break; - case '\n': os<<"\\n"; break; - case '\r': os<<"\\r"; break; - case '\t': os<<"\\t"; break; - default: - { - if(c >= 32 && c <= 126) - { - os<= 32 && c <= 126) { + os << c; + } else { + u32 cnum = (u8)c; + os << "\\u" << std::hex << std::setw(4) + << std::setfill('0') << cnum; } break; } } } - os<<"\""; + + os << "\""; return os.str(); } -// Reads a string encoded in JSON format std::string deSerializeJsonString(std::istream &is) { std::ostringstream os(std::ios::binary); @@ -171,55 +297,66 @@ std::string deSerializeJsonString(std::istream &is) // Parse initial doublequote is >> c; - if(c != '"') + if (c != '"') throw SerializationError("JSON string must start with doublequote"); // Parse characters - for(;;) - { + for (;;) { c = is.get(); - if(is.eof()) + if (is.eof()) throw SerializationError("JSON string ended prematurely"); - if(c == '"') - { + + if (c == '"') { return os.str(); - } - else if(c == '\\') - { + } else if (c == '\\') { c2 = is.get(); - if(is.eof()) + if (is.eof()) throw SerializationError("JSON string ended prematurely"); - switch(c2) - { - default: os<> std::hex >> hexnumber; - os<<((char)hexnumber); + os << (char)hexnumber; break; } + default: + os << c2; + break; } - } - else - { - os<size() >= 2) { + if (out->size() >= 2) out->resize(out->size() - 2); - } return true; } #undef SIGN_CAST + +//// +//// Other +//// + +std::string serializeHexString(const std::string &data, bool insert_spaces) +{ + std::string result; + result.reserve(data.size() * (2 + insert_spaces)); + + static const char hex_chars[] = "0123456789abcdef"; + + const size_t len = data.size(); + for (size_t i = 0; i != len; i++) { + u8 byte = data[i]; + result.push_back(hex_chars[(byte >> 4) & 0x0F]); + result.push_back(hex_chars[(byte >> 0) & 0x0F]); + if (insert_spaces && i != len - 1) + result.push_back(' '); + } + + return result; +} diff --git a/src/util/serialize.h b/src/util/serialize.h index 923046ca..bee94451 100644 --- a/src/util/serialize.h +++ b/src/util/serialize.h @@ -21,196 +21,170 @@ with this program; if not, write to the Free Software Foundation, Inc., #define UTIL_SERIALIZE_HEADER #include "../irrlichttypes_bloated.h" +#include "../exceptions.h" // for SerializationError +#include "../debug.h" // for assert + #include "config.h" #if HAVE_ENDIAN_H -#include -#include // for memcpy + #include #endif +#include // for memcpy #include #include +#include #define FIXEDPOINT_FACTOR 1000.0f -#define FIXEDPOINT_INVFACTOR (1.0f/FIXEDPOINT_FACTOR) + +// 0x7FFFFFFF / 1000.0f is not serializable. +// The limited float precision at this magnitude may cause the result to round +// to a greater value than can be represented by a 32 bit integer when increased +// by a factor of FIXEDPOINT_FACTOR. As a result, [F1000_MIN..F1000_MAX] does +// not represent the full range, but rather the largest safe range, of values on +// all supported architectures. Note: This definition makes assumptions on +// platform float-to-int conversion behavior. +#define F1000_MIN ((float)(s32)((-0x7FFFFFFF - 1) / FIXEDPOINT_FACTOR)) +#define F1000_MAX ((float)(s32)((0x7FFFFFFF) / FIXEDPOINT_FACTOR)) + +#define STRING_MAX_LEN 0xFFFF +#define WIDE_STRING_MAX_LEN 0xFFFF +// 64 MB ought to be enough for anybody - Billy G. +#define LONG_STRING_MAX_LEN (64 * 1024 * 1024) + #if HAVE_ENDIAN_H // use machine native byte swapping routines // Note: memcpy below is optimized out by modern compilers -inline void writeU64(u8* data, u64 i) -{ - u64 val = htobe64(i); - memcpy(data, &val, 8); -} - -inline void writeU32(u8* data, u32 i) -{ - u32 val = htobe32(i); - memcpy(data, &val, 4); -} - -inline void writeU16(u8* data, u16 i) -{ - u16 val = htobe16(i); - memcpy(data, &val, 2); -} - -inline u64 readU64(const u8* data) -{ - u64 val; - memcpy(&val, data, 8); - return be64toh(val); -} - -inline u32 readU32(const u8* data) -{ - u32 val; - memcpy(&val, data, 4); - return be32toh(val); -} - -inline u16 readU16(const u8* data) +inline u16 readU16(const u8 *data) { u16 val; memcpy(&val, data, 2); return be16toh(val); } -#else -// generic byte-swapping implementation - -inline void writeU64(u8 *data, u64 i) +inline u32 readU32(const u8 *data) { - data[0] = ((i>>56)&0xff); - data[1] = ((i>>48)&0xff); - data[2] = ((i>>40)&0xff); - data[3] = ((i>>32)&0xff); - data[4] = ((i>>24)&0xff); - data[5] = ((i>>16)&0xff); - data[6] = ((i>> 8)&0xff); - data[7] = ((i>> 0)&0xff); -} - -inline void writeU32(u8 *data, u32 i) -{ - data[0] = ((i>>24)&0xff); - data[1] = ((i>>16)&0xff); - data[2] = ((i>> 8)&0xff); - data[3] = ((i>> 0)&0xff); -} - -inline void writeU16(u8 *data, u16 i) -{ - data[0] = ((i>> 8)&0xff); - data[1] = ((i>> 0)&0xff); + u32 val; + memcpy(&val, data, 4); + return be32toh(val); } inline u64 readU64(const u8 *data) { - return ((u64)data[0]<<56) | ((u64)data[1]<<48) - | ((u64)data[2]<<40) | ((u64)data[3]<<32) - | ((u64)data[4]<<24) | ((u64)data[5]<<16) - | ((u64)data[6]<<8) | ((u64)data[7]<<0); + u64 val; + memcpy(&val, data, 8); + return be64toh(val); +} + +inline void writeU16(u8 *data, u16 i) +{ + u16 val = htobe16(i); + memcpy(data, &val, 2); +} + +inline void writeU32(u8 *data, u32 i) +{ + u32 val = htobe32(i); + memcpy(data, &val, 4); +} + +inline void writeU64(u8 *data, u64 i) +{ + u64 val = htobe64(i); + memcpy(data, &val, 8); +} + +#else +// generic byte-swapping implementation + +inline u16 readU16(const u8 *data) +{ + return + ((u16)data[0] << 8) | ((u16)data[1] << 0); } inline u32 readU32(const u8 *data) { - return (data[0]<<24) | (data[1]<<16) | (data[2]<<8) | (data[3]<<0); + return + ((u32)data[0] << 24) | ((u32)data[1] << 16) | + ((u32)data[2] << 8) | ((u32)data[3] << 0); } -inline u16 readU16(const u8 *data) +inline u64 readU64(const u8 *data) { - return (data[0]<<8) | (data[1]<<0); + return + ((u64)data[0] << 56) | ((u64)data[1] << 48) | + ((u64)data[2] << 40) | ((u64)data[3] << 32) | + ((u64)data[4] << 24) | ((u64)data[5] << 16) | + ((u64)data[6] << 8) | ((u64)data[7] << 0); } -#endif - -inline void writeU8(u8 *data, u8 i) +inline void writeU16(u8 *data, u16 i) { - data[0] = ((i>> 0)&0xff); + data[0] = (i >> 8) & 0xFF; + data[1] = (i >> 0) & 0xFF; } +inline void writeU32(u8 *data, u32 i) +{ + data[0] = (i >> 24) & 0xFF; + data[1] = (i >> 16) & 0xFF; + data[2] = (i >> 8) & 0xFF; + data[3] = (i >> 0) & 0xFF; +} + +inline void writeU64(u8 *data, u64 i) +{ + data[0] = (i >> 56) & 0xFF; + data[1] = (i >> 48) & 0xFF; + data[2] = (i >> 40) & 0xFF; + data[3] = (i >> 32) & 0xFF; + data[4] = (i >> 24) & 0xFF; + data[5] = (i >> 16) & 0xFF; + data[6] = (i >> 8) & 0xFF; + data[7] = (i >> 0) & 0xFF; +} + +#endif // HAVE_ENDIAN_H + +//////////////// read routines //////////////// + inline u8 readU8(const u8 *data) { - return (data[0]<<0); + return ((u8)data[0] << 0); } -inline void writeS32(u8 *data, s32 i){ - writeU32(data, (u32)i); -} -inline s32 readS32(const u8 *data){ - return (s32)readU32(data); -} - -inline void writeS16(u8 *data, s16 i){ - writeU16(data, (u16)i); -} -inline s16 readS16(const u8 *data){ - return (s16)readU16(data); -} - -inline void writeS8(u8 *data, s8 i){ - writeU8(data, (u8)i); -} -inline s8 readS8(const u8 *data){ +inline s8 readS8(const u8 *data) +{ return (s8)readU8(data); } -inline void writeF1000(u8 *data, f32 i){ - writeS32(data, i*FIXEDPOINT_FACTOR); -} -inline f32 readF1000(const u8 *data){ - return (f32)readS32(data)*FIXEDPOINT_INVFACTOR; +inline s16 readS16(const u8 *data) +{ + return (s16)readU16(data); } -inline void writeV3S32(u8 *data, v3s32 p) +inline s32 readS32(const u8 *data) { - writeS32(&data[0], p.X); - writeS32(&data[4], p.Y); - writeS32(&data[8], p.Z); + return (s32)readU32(data); } -inline v3s32 readV3S32(const u8 *data) + +inline s64 readS64(const u8 *data) { - v3s32 p; - p.X = readS32(&data[0]); - p.Y = readS32(&data[4]); - p.Z = readS32(&data[8]); + return (s64)readU64(data); +} + +inline f32 readF1000(const u8 *data) +{ + return (f32)readS32(data) / FIXEDPOINT_FACTOR; +} + +inline video::SColor readARGB8(const u8 *data) +{ + video::SColor p(readU32(data)); return p; } -inline void writeV3F1000(u8 *data, v3f p) -{ - writeF1000(&data[0], p.X); - writeF1000(&data[4], p.Y); - writeF1000(&data[8], p.Z); -} -inline v3f readV3F1000(const u8 *data) -{ - v3f p; - p.X = (float)readF1000(&data[0]); - p.Y = (float)readF1000(&data[4]); - p.Z = (float)readF1000(&data[8]); - return p; -} - -inline void writeV2F1000(u8 *data, v2f p) -{ - writeF1000(&data[0], p.X); - writeF1000(&data[4], p.Y); -} -inline v2f readV2F1000(const u8 *data) -{ - v2f p; - p.X = (float)readF1000(&data[0]); - p.Y = (float)readF1000(&data[4]); - return p; -} - -inline void writeV2S16(u8 *data, v2s16 p) -{ - writeS16(&data[0], p.X); - writeS16(&data[2], p.Y); -} - inline v2s16 readV2S16(const u8 *data) { v2s16 p; @@ -219,27 +193,6 @@ inline v2s16 readV2S16(const u8 *data) return p; } -inline void writeV2S32(u8 *data, v2s32 p) -{ - writeS32(&data[0], p.X); - writeS32(&data[4], p.Y); -} - -inline v2s32 readV2S32(const u8 *data) -{ - v2s32 p; - p.X = readS32(&data[0]); - p.Y = readS32(&data[4]); - return p; -} - -inline void writeV3S16(u8 *data, v3s16 p) -{ - writeS16(&data[0], p.X); - writeS16(&data[2], p.Y); - writeS16(&data[4], p.Z); -} - inline v3s16 readV3S16(const u8 *data) { v3s16 p; @@ -249,182 +202,174 @@ inline v3s16 readV3S16(const u8 *data) return p; } +inline v2s32 readV2S32(const u8 *data) +{ + v2s32 p; + p.X = readS32(&data[0]); + p.Y = readS32(&data[4]); + return p; +} + +inline v3s32 readV3S32(const u8 *data) +{ + v3s32 p; + p.X = readS32(&data[0]); + p.Y = readS32(&data[4]); + p.Z = readS32(&data[8]); + return p; +} + +inline v2f readV2F1000(const u8 *data) +{ + v2f p; + p.X = (float)readF1000(&data[0]); + p.Y = (float)readF1000(&data[4]); + return p; +} + +inline v3f readV3F1000(const u8 *data) +{ + v3f p; + p.X = (float)readF1000(&data[0]); + p.Y = (float)readF1000(&data[4]); + p.Z = (float)readF1000(&data[8]); + return p; +} + +/////////////// write routines //////////////// + +inline void writeU8(u8 *data, u8 i) +{ + data[0] = (i >> 0) & 0xFF; +} + +inline void writeS8(u8 *data, s8 i) +{ + writeU8(data, (u8)i); +} + +inline void writeS16(u8 *data, s16 i) +{ + writeU16(data, (u16)i); +} + +inline void writeS32(u8 *data, s32 i) +{ + writeU32(data, (u32)i); +} + +inline void writeS64(u8 *data, s64 i) +{ + writeU64(data, (u64)i); +} + +inline void writeF1000(u8 *data, f32 i) +{ + assert(i >= F1000_MIN && i <= F1000_MAX); + writeS32(data, i * FIXEDPOINT_FACTOR); +} + inline void writeARGB8(u8 *data, video::SColor p) { writeU32(data, p.color); } -inline video::SColor readARGB8(const u8 *data) +inline void writeV2S16(u8 *data, v2s16 p) { - video::SColor p(readU32(data)); - return p; + writeS16(&data[0], p.X); + writeS16(&data[2], p.Y); } -/* - The above stuff directly interfaced to iostream -*/ - -inline void writeU8(std::ostream &os, u8 p) +inline void writeV3S16(u8 *data, v3s16 p) { - char buf[1]; - writeU8((u8*)buf, p); - os.write(buf, 1); -} -inline u8 readU8(std::istream &is) -{ - char buf[1] = {0}; - is.read(buf, 1); - return readU8((u8*)buf); + writeS16(&data[0], p.X); + writeS16(&data[2], p.Y); + writeS16(&data[4], p.Z); } -inline void writeU16(std::ostream &os, u16 p) +inline void writeV2S32(u8 *data, v2s32 p) { - char buf[2]; - writeU16((u8*)buf, p); - os.write(buf, 2); -} -inline u16 readU16(std::istream &is) -{ - char buf[2] = {0}; - is.read(buf, 2); - return readU16((u8*)buf); + writeS32(&data[0], p.X); + writeS32(&data[4], p.Y); } -inline void writeU32(std::ostream &os, u32 p) +inline void writeV3S32(u8 *data, v3s32 p) { - char buf[4]; - writeU32((u8*)buf, p); - os.write(buf, 4); -} -inline u32 readU32(std::istream &is) -{ - char buf[4] = {0}; - is.read(buf, 4); - return readU32((u8*)buf); + writeS32(&data[0], p.X); + writeS32(&data[4], p.Y); + writeS32(&data[8], p.Z); } -inline void writeS32(std::ostream &os, s32 p) +inline void writeV2F1000(u8 *data, v2f p) { - writeU32(os, (u32) p); -} -inline s32 readS32(std::istream &is) -{ - return (s32)readU32(is); + writeF1000(&data[0], p.X); + writeF1000(&data[4], p.Y); } -inline void writeS16(std::ostream &os, s16 p) +inline void writeV3F1000(u8 *data, v3f p) { - writeU16(os, (u16) p); -} -inline s16 readS16(std::istream &is) -{ - return (s16)readU16(is); + writeF1000(&data[0], p.X); + writeF1000(&data[4], p.Y); + writeF1000(&data[8], p.Z); } -inline void writeS8(std::ostream &os, s8 p) -{ - writeU8(os, (u8) p); -} -inline s8 readS8(std::istream &is) -{ - return (s8)readU8(is); -} +//// +//// Iostream wrapper for data read/write +//// -inline void writeF1000(std::ostream &os, f32 p) -{ - char buf[4]; - writeF1000((u8*)buf, p); - os.write(buf, 4); -} -inline f32 readF1000(std::istream &is) -{ - char buf[4] = {0}; - is.read(buf, 4); - return readF1000((u8*)buf); -} +#define MAKE_STREAM_READ_FXN(T, N, S) \ + inline T read ## N(std::istream &is) \ + { \ + char buf[S] = {0}; \ + is.read(buf, sizeof(buf)); \ + return read ## N((u8 *)buf); \ + } -inline void writeV3F1000(std::ostream &os, v3f p) -{ - char buf[12]; - writeV3F1000((u8*)buf, p); - os.write(buf, 12); -} -inline v3f readV3F1000(std::istream &is) -{ - char buf[12]; - is.read(buf, 12); - return readV3F1000((u8*)buf); -} +#define MAKE_STREAM_WRITE_FXN(T, N, S) \ + inline void write ## N(std::ostream &os, T val) \ + { \ + char buf[S]; \ + write ## N((u8 *)buf, val); \ + os.write(buf, sizeof(buf)); \ + } -inline void writeV2F1000(std::ostream &os, v2f p) -{ - char buf[8]; - writeV2F1000((u8*)buf, p); - os.write(buf, 8); -} -inline v2f readV2F1000(std::istream &is) -{ - char buf[8] = {0}; - is.read(buf, 8); - return readV2F1000((u8*)buf); -} +MAKE_STREAM_READ_FXN(u8, U8, 1); +MAKE_STREAM_READ_FXN(u16, U16, 2); +MAKE_STREAM_READ_FXN(u32, U32, 4); +MAKE_STREAM_READ_FXN(u64, U64, 8); +MAKE_STREAM_READ_FXN(s8, S8, 1); +MAKE_STREAM_READ_FXN(s16, S16, 2); +MAKE_STREAM_READ_FXN(s32, S32, 4); +MAKE_STREAM_READ_FXN(s64, S64, 8); +MAKE_STREAM_READ_FXN(f32, F1000, 4); +MAKE_STREAM_READ_FXN(v2s16, V2S16, 4); +MAKE_STREAM_READ_FXN(v3s16, V3S16, 6); +MAKE_STREAM_READ_FXN(v2s32, V2S32, 8); +MAKE_STREAM_READ_FXN(v3s32, V3S32, 12); +MAKE_STREAM_READ_FXN(v2f, V2F1000, 8); +MAKE_STREAM_READ_FXN(v3f, V3F1000, 12); +MAKE_STREAM_READ_FXN(video::SColor, ARGB8, 4); -inline void writeV2S16(std::ostream &os, v2s16 p) -{ - char buf[4]; - writeV2S16((u8*)buf, p); - os.write(buf, 4); -} -inline v2s16 readV2S16(std::istream &is) -{ - char buf[4] = {0}; - is.read(buf, 4); - return readV2S16((u8*)buf); -} +MAKE_STREAM_WRITE_FXN(u8, U8, 1); +MAKE_STREAM_WRITE_FXN(u16, U16, 2); +MAKE_STREAM_WRITE_FXN(u32, U32, 4); +MAKE_STREAM_WRITE_FXN(u64, U64, 8); +MAKE_STREAM_WRITE_FXN(s8, S8, 1); +MAKE_STREAM_WRITE_FXN(s16, S16, 2); +MAKE_STREAM_WRITE_FXN(s32, S32, 4); +MAKE_STREAM_WRITE_FXN(s64, S64, 8); +MAKE_STREAM_WRITE_FXN(f32, F1000, 4); +MAKE_STREAM_WRITE_FXN(v2s16, V2S16, 4); +MAKE_STREAM_WRITE_FXN(v3s16, V3S16, 6); +MAKE_STREAM_WRITE_FXN(v2s32, V2S32, 8); +MAKE_STREAM_WRITE_FXN(v3s32, V3S32, 12); +MAKE_STREAM_WRITE_FXN(v2f, V2F1000, 8); +MAKE_STREAM_WRITE_FXN(v3f, V3F1000, 12); +MAKE_STREAM_WRITE_FXN(video::SColor, ARGB8, 4); -inline void writeV2S32(std::ostream &os, v2s32 p) -{ - char buf[8]; - writeV2S32((u8*)buf, p); - os.write(buf, 8); -} -inline v2s32 readV2S32(std::istream &is) -{ - char buf[8] = {0}; - is.read(buf, 8); - return readV2S32((u8*)buf); -} - -inline void writeV3S16(std::ostream &os, v3s16 p) -{ - char buf[6]; - writeV3S16((u8*)buf, p); - os.write(buf, 6); -} -inline v3s16 readV3S16(std::istream &is) -{ - char buf[6] = {0}; - is.read(buf, 6); - return readV3S16((u8*)buf); -} - -inline void writeARGB8(std::ostream &os, video::SColor p) -{ - char buf[4]; - writeARGB8((u8*)buf, p); - os.write(buf, 4); -} - -inline video::SColor readARGB8(std::istream &is) -{ - char buf[4] = {0}; - is.read(buf, 4); - return readARGB8((u8*)buf); -} - -/* - More serialization stuff -*/ +//// +//// More serialization stuff +//// // Creates a string with the length as the first two bytes std::string serializeString(const std::string &plain); @@ -450,6 +395,9 @@ std::string serializeJsonString(const std::string &plain); // Reads a string encoded in JSON format std::string deSerializeJsonString(std::istream &is); +// Creates a string consisting of the hexadecimal representation of `data` +std::string serializeHexString(const std::string &data, bool insert_spaces=false); + // Creates a string containing comma delimited values of a struct whose layout is // described by the parameter format bool serializeStructToString(std::string *out, @@ -460,5 +408,238 @@ bool serializeStructToString(std::string *out, bool deSerializeStringToStruct(std::string valstr, std::string format, void *out, size_t olen); -#endif +//// +//// BufReader +//// +extern SerializationError eof_ser_err; + +#define MAKE_BUFREADER_GETNOEX_FXN(T, N, S) \ + inline bool get ## N ## NoEx(T *val) \ + { \ + if (pos + S > size) \ + return false; \ + *val = read ## N(data + pos); \ + pos += S; \ + return true; \ + } + +#define MAKE_BUFREADER_GET_FXN(T, N) \ + inline T get ## N() \ + { \ + T val; \ + if (!get ## N ## NoEx(&val)) \ + throw eof_ser_err; \ + return val; \ + } + +class BufReader { +public: + BufReader(const u8 *data_, size_t size_) : + data(data_), + size(size_), + pos(0) + { + } + + MAKE_BUFREADER_GETNOEX_FXN(u8, U8, 1); + MAKE_BUFREADER_GETNOEX_FXN(u16, U16, 2); + MAKE_BUFREADER_GETNOEX_FXN(u32, U32, 4); + MAKE_BUFREADER_GETNOEX_FXN(u64, U64, 8); + MAKE_BUFREADER_GETNOEX_FXN(s8, S8, 1); + MAKE_BUFREADER_GETNOEX_FXN(s16, S16, 2); + MAKE_BUFREADER_GETNOEX_FXN(s32, S32, 4); + MAKE_BUFREADER_GETNOEX_FXN(s64, S64, 8); + MAKE_BUFREADER_GETNOEX_FXN(f32, F1000, 4); + MAKE_BUFREADER_GETNOEX_FXN(v2s16, V2S16, 4); + MAKE_BUFREADER_GETNOEX_FXN(v3s16, V3S16, 6); + MAKE_BUFREADER_GETNOEX_FXN(v2s32, V2S32, 8); + MAKE_BUFREADER_GETNOEX_FXN(v3s32, V3S32, 12); + MAKE_BUFREADER_GETNOEX_FXN(v2f, V2F1000, 8); + MAKE_BUFREADER_GETNOEX_FXN(v3f, V3F1000, 12); + MAKE_BUFREADER_GETNOEX_FXN(video::SColor, ARGB8, 4); + + bool getStringNoEx(std::string *val); + bool getWideStringNoEx(std::wstring *val); + bool getLongStringNoEx(std::string *val); + bool getRawDataNoEx(void *data, size_t len); + + MAKE_BUFREADER_GET_FXN(u8, U8); + MAKE_BUFREADER_GET_FXN(u16, U16); + MAKE_BUFREADER_GET_FXN(u32, U32); + MAKE_BUFREADER_GET_FXN(u64, U64); + MAKE_BUFREADER_GET_FXN(s8, S8); + MAKE_BUFREADER_GET_FXN(s16, S16); + MAKE_BUFREADER_GET_FXN(s32, S32); + MAKE_BUFREADER_GET_FXN(s64, S64); + MAKE_BUFREADER_GET_FXN(f32, F1000); + MAKE_BUFREADER_GET_FXN(v2s16, V2S16); + MAKE_BUFREADER_GET_FXN(v3s16, V3S16); + MAKE_BUFREADER_GET_FXN(v2s32, V2S32); + MAKE_BUFREADER_GET_FXN(v3s32, V3S32); + MAKE_BUFREADER_GET_FXN(v2f, V2F1000); + MAKE_BUFREADER_GET_FXN(v3f, V3F1000); + MAKE_BUFREADER_GET_FXN(video::SColor, ARGB8); + MAKE_BUFREADER_GET_FXN(std::string, String); + MAKE_BUFREADER_GET_FXN(std::wstring, WideString); + MAKE_BUFREADER_GET_FXN(std::string, LongString); + + inline void getRawData(void *val, size_t len) + { + if (!getRawDataNoEx(val, len)) + throw eof_ser_err; + } + + inline size_t remaining() + { + assert(pos <= size); + return size - pos; + } + + const u8 *data; + size_t size; + size_t pos; +}; + +#undef MAKE_BUFREADER_GET_FXN +#undef MAKE_BUFREADER_GETNOEX_FXN + + +//// +//// Vector-based write routines +//// + +inline void putU8(std::vector *dest, u8 val) +{ + dest->push_back((val >> 0) & 0xFF); +} + +inline void putU16(std::vector *dest, u16 val) +{ + dest->push_back((val >> 8) & 0xFF); + dest->push_back((val >> 0) & 0xFF); +} + +inline void putU32(std::vector *dest, u32 val) +{ + dest->push_back((val >> 24) & 0xFF); + dest->push_back((val >> 16) & 0xFF); + dest->push_back((val >> 8) & 0xFF); + dest->push_back((val >> 0) & 0xFF); +} + +inline void putU64(std::vector *dest, u64 val) +{ + dest->push_back((val >> 56) & 0xFF); + dest->push_back((val >> 48) & 0xFF); + dest->push_back((val >> 40) & 0xFF); + dest->push_back((val >> 32) & 0xFF); + dest->push_back((val >> 24) & 0xFF); + dest->push_back((val >> 16) & 0xFF); + dest->push_back((val >> 8) & 0xFF); + dest->push_back((val >> 0) & 0xFF); +} + +inline void putS8(std::vector *dest, s8 val) +{ + putU8(dest, val); +} + +inline void putS16(std::vector *dest, s16 val) +{ + putU16(dest, val); +} + +inline void putS32(std::vector *dest, s32 val) +{ + putU32(dest, val); +} + +inline void putS64(std::vector *dest, s64 val) +{ + putU64(dest, val); +} + +inline void putF1000(std::vector *dest, f32 val) +{ + putS32(dest, val * FIXEDPOINT_FACTOR); +} + +inline void putV2S16(std::vector *dest, v2s16 val) +{ + putS16(dest, val.X); + putS16(dest, val.Y); +} + +inline void putV3S16(std::vector *dest, v3s16 val) +{ + putS16(dest, val.X); + putS16(dest, val.Y); + putS16(dest, val.Z); +} + +inline void putV2S32(std::vector *dest, v2s32 val) +{ + putS32(dest, val.X); + putS32(dest, val.Y); +} + +inline void putV3S32(std::vector *dest, v3s32 val) +{ + putS32(dest, val.X); + putS32(dest, val.Y); + putS32(dest, val.Z); +} + +inline void putV2F1000(std::vector *dest, v2f val) +{ + putF1000(dest, val.X); + putF1000(dest, val.Y); +} + +inline void putV3F1000(std::vector *dest, v3f val) +{ + putF1000(dest, val.X); + putF1000(dest, val.Y); + putF1000(dest, val.Z); +} + +inline void putARGB8(std::vector *dest, video::SColor val) +{ + putU32(dest, val.color); +} + +inline void putString(std::vector *dest, const std::string &val) +{ + if (val.size() > STRING_MAX_LEN) + throw SerializationError("String too long"); + + putU16(dest, val.size()); + dest->insert(dest->end(), val.begin(), val.end()); +} + +inline void putWideString(std::vector *dest, const std::wstring &val) +{ + if (val.size() > WIDE_STRING_MAX_LEN) + throw SerializationError("String too long"); + + putU16(dest, val.size()); + for (size_t i = 0; i != val.size(); i++) + putU16(dest, val[i]); +} + +inline void putLongString(std::vector *dest, const std::string &val) +{ + if (val.size() > LONG_STRING_MAX_LEN) + throw SerializationError("String too long"); + + putU32(dest, val.size()); + dest->insert(dest->end(), val.begin(), val.end()); +} + +inline void putRawData(std::vector *dest, const void *src, size_t len) +{ + dest->insert(dest->end(), (u8 *)src, (u8 *)src + len); +} + +#endif diff --git a/src/util/sha256.c b/src/util/sha256.c index 311aac4a..4c2bb71a 100644 --- a/src/util/sha256.c +++ b/src/util/sha256.c @@ -15,8 +15,8 @@ const char SHA256_version[] = "SHA-256" OPENSSL_VERSION_PTEXT; /* mem_clr.c */ -unsigned char cleanse_ctr = 0; -void OPENSSL_cleanse(void *ptr, size_t len) +unsigned static char cleanse_ctr = 0; +static void OPENSSL_cleanse(void *ptr, size_t len) { unsigned char *p = ptr; size_t loop = len, ctr = cleanse_ctr; diff --git a/src/util/srp.cpp b/src/util/srp.cpp index cc8bac6b..b4af58d6 100644 --- a/src/util/srp.cpp +++ b/src/util/srp.cpp @@ -69,6 +69,19 @@ static int g_initialized = 0; static unsigned int g_rand_idx; static unsigned char g_rand_buff[RAND_BUFF_MAX]; +void *(*srp_alloc) (size_t) = &malloc; +void *(*srp_realloc) (void *, size_t) = &realloc; +void (*srp_free) (void *) = &free; + +void srp_set_memory_functions( + void *(*new_srp_alloc) (size_t), + void *(*new_srp_realloc) (void *, size_t), + void (*new_srp_free) (void *)) { + srp_alloc = new_srp_alloc; + srp_realloc = new_srp_realloc; + srp_free = new_srp_free; +} + typedef struct { mpz_t N; @@ -166,13 +179,22 @@ static struct NGHex global_Ng_constants[] = { }; +static void delete_ng(NGConstant *ng) +{ + if (ng) { + mpz_clear(ng->N); + mpz_clear(ng->g); + srp_free(ng); + } +} + static NGConstant *new_ng( SRP_NGType ng_type, const char *n_hex, const char *g_hex ) { - NGConstant *ng = (NGConstant *) malloc(sizeof(NGConstant)); + NGConstant *ng = (NGConstant *) srp_alloc(sizeof(NGConstant)); mpz_init(ng->N); mpz_init(ng->g); - if (!ng || !ng->N || !ng->g) + if (!ng) return 0; if (ng_type != SRP_NG_CUSTOM) { @@ -180,22 +202,18 @@ static NGConstant *new_ng( SRP_NGType ng_type, const char *n_hex, const char *g_ g_hex = global_Ng_constants[ ng_type ].g_hex; } - mpz_set_str(ng->N, n_hex, 16); - mpz_set_str(ng->g, g_hex, 16); + int rv = 0; + rv = mpz_set_str(ng->N, n_hex, 16); + rv = rv | mpz_set_str(ng->g, g_hex, 16); + + if (rv) { + delete_ng(ng); + return 0; + } return ng; } -static void delete_ng( NGConstant *ng ) -{ - if (ng) { - mpz_clear(ng->N); - mpz_clear(ng->g); - free(ng); - } -} - - typedef union { @@ -362,18 +380,18 @@ static int H_nn(mpz_t result, SRP_HashAlgorithm alg, const mpz_t N, const mpz_t size_t len_n1 = mpz_num_bytes(n1); size_t len_n2 = mpz_num_bytes(n2); size_t nbytes = len_N + len_N; - unsigned char *bin = (unsigned char *) malloc(nbytes); + unsigned char *bin = (unsigned char *) srp_alloc(nbytes); if (!bin) return 0; if (len_n1 > len_N || len_n2 > len_N) { - free(bin); + srp_free(bin); return 0; } memset(bin, 0, nbytes); mpz_to_bin(n1, bin + (len_N - len_n1)); mpz_to_bin(n2, bin + (len_N + len_N - len_n2)); hash( alg, bin, nbytes, buff ); - free(bin); + srp_free(bin); mpz_from_bin(buff, hash_length(alg), result); return 1; } @@ -382,13 +400,13 @@ static int H_ns(mpz_t result, SRP_HashAlgorithm alg, const unsigned char *n, siz { unsigned char buff[SHA512_DIGEST_LENGTH]; size_t nbytes = len_n + len_bytes; - unsigned char *bin = (unsigned char *) malloc(nbytes); + unsigned char *bin = (unsigned char *) srp_alloc(nbytes); if (!bin) return 0; memcpy(bin, n, len_n); memcpy(bin + len_n, bytes, len_bytes); hash(alg, bin, nbytes, buff); - free(bin); + srp_free(bin); mpz_from_bin(buff, hash_length(alg), result); return 1; } @@ -413,23 +431,23 @@ static int calculate_x(mpz_t result, SRP_HashAlgorithm alg, const unsigned char static void update_hash_n(SRP_HashAlgorithm alg, HashCTX *ctx, const mpz_t n) { size_t len = mpz_num_bytes(n); - unsigned char* n_bytes = (unsigned char *) malloc(len); + unsigned char* n_bytes = (unsigned char *) srp_alloc(len); if (!n_bytes) return; mpz_to_bin(n, n_bytes); hash_update(alg, ctx, n_bytes, len); - free(n_bytes); + srp_free(n_bytes); } static void hash_num( SRP_HashAlgorithm alg, const mpz_t n, unsigned char *dest ) { int nbytes = mpz_num_bytes(n); - unsigned char *bin = (unsigned char *) malloc(nbytes); + unsigned char *bin = (unsigned char *) srp_alloc(nbytes); if(!bin) return; mpz_to_bin(n, bin); hash(alg, bin, nbytes, dest); - free(bin); + srp_free(bin); } static void calculate_M(SRP_HashAlgorithm alg, NGConstant *ng, unsigned char *dest, @@ -505,7 +523,7 @@ static void srp_pcgrandom_seed(srp_pcgrandom *r, unsigned long long int state, } -static int fill_buff() +static SRP_Result fill_buff() { g_rand_idx = 0; @@ -521,7 +539,7 @@ static int fill_buff() CryptGenRandom(wctx, sizeof(g_rand_buff), (BYTE*) g_rand_buff); CryptReleaseContext(wctx, 0); - return 1; + return SRP_OK; #else fp = fopen("/dev/urandom", "r"); @@ -530,41 +548,48 @@ static int fill_buff() fread(g_rand_buff, sizeof(g_rand_buff), 1, fp); fclose(fp); } else { - srp_pcgrandom *r = (srp_pcgrandom *) malloc(sizeof(srp_pcgrandom)); + srp_pcgrandom *r = (srp_pcgrandom *) srp_alloc(sizeof(srp_pcgrandom)); + if (!r) + return SRP_ERR; srp_pcgrandom_seed(r, time(NULL) ^ clock(), 0xda3e39cb94b95bdbULL); size_t i = 0; for (i = 0; i < RAND_BUFF_MAX; i++) { g_rand_buff[i] = srp_pcgrandom_next(r); } + srp_free(r); } #endif - return 1; + return SRP_OK; } -static void mpz_fill_random(mpz_t num) +static SRP_Result mpz_fill_random(mpz_t num) { // was call: BN_rand(num, 256, -1, 0); if (RAND_BUFF_MAX - g_rand_idx < 32) - fill_buff(); + if (fill_buff() != SRP_OK) + return SRP_ERR; mpz_from_bin((const unsigned char *) (&g_rand_buff[g_rand_idx]), 32, num); g_rand_idx += 32; + return SRP_OK; } -static void init_random() +static SRP_Result init_random() { if (g_initialized) - return; - g_initialized = fill_buff(); + return SRP_OK; + SRP_Result ret = fill_buff(); + g_initialized = (ret == SRP_OK); + return ret; } #define srp_dbg_num(num, text) ; /*void srp_dbg_num(mpz_t num, char * prevtext) { int len_num = mpz_num_bytes(num); - char *bytes_num = (char*) malloc(len_num); + char *bytes_num = (char*) srp_alloc(len_num); mpz_to_bin(num, (unsigned char *) bytes_num); srp_dbg_data(bytes_num, len_num, prevtext); - free(bytes_num); + srp_free(bytes_num); }*/ @@ -574,33 +599,42 @@ static void init_random() * ***********************************************************************************************************/ -void srp_create_salted_verification_key( SRP_HashAlgorithm alg, +SRP_Result srp_create_salted_verification_key( SRP_HashAlgorithm alg, SRP_NGType ng_type, const char *username_for_verifier, const unsigned char *password, size_t len_password, unsigned char **bytes_s, size_t *len_s, unsigned char **bytes_v, size_t *len_v, const char *n_hex, const char *g_hex ) { + SRP_Result ret = SRP_OK; + mpz_t v; mpz_init(v); mpz_t x; mpz_init(x); NGConstant *ng = new_ng(ng_type, n_hex, g_hex); - if(!ng) - goto cleanup_and_exit; + if (!ng) + goto error_and_exit; + + if (init_random() != SRP_OK) /* Only happens once */ + goto error_and_exit; if (*bytes_s == NULL) { - *len_s = 16; - if (RAND_BUFF_MAX - g_rand_idx < 16) - fill_buff(); - *bytes_s = (unsigned char*)malloc(sizeof(char) * 16); - memcpy(*bytes_s, &g_rand_buff + g_rand_idx, sizeof(char) * 16); - g_rand_idx += 16; + size_t size_to_fill = 16; + *len_s = size_to_fill; + if (RAND_BUFF_MAX - g_rand_idx < size_to_fill) + if (fill_buff() != SRP_OK) + goto error_and_exit; + *bytes_s = (unsigned char*)srp_alloc(size_to_fill); + if (!*bytes_s) + goto error_and_exit; + memcpy(*bytes_s, &g_rand_buff + g_rand_idx, size_to_fill); + g_rand_idx += size_to_fill; } if (!calculate_x(x, alg, *bytes_s, *len_s, username_for_verifier, password, len_password)) - goto cleanup_and_exit; + goto error_and_exit; srp_dbg_num(x, "Server calculated x: "); @@ -608,10 +642,10 @@ void srp_create_salted_verification_key( SRP_HashAlgorithm alg, *len_v = mpz_num_bytes(v); - *bytes_v = (unsigned char*)malloc(*len_v); + *bytes_v = (unsigned char*)srp_alloc(*len_v); if (!bytes_v) - goto cleanup_and_exit; + goto error_and_exit; mpz_to_bin(v, *bytes_v); @@ -619,6 +653,10 @@ cleanup_and_exit: delete_ng( ng ); mpz_clear(v); mpz_clear(x); + return ret; +error_and_exit: + ret = SRP_ERR; + goto cleanup_and_exit; } @@ -656,19 +694,23 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg, if (!ng) goto cleanup_and_exit; - ver = (struct SRPVerifier *) malloc( sizeof(struct SRPVerifier) ); + ver = (struct SRPVerifier *) srp_alloc( sizeof(struct SRPVerifier) ); if (!ver) goto cleanup_and_exit; - init_random(); /* Only happens once */ + if (init_random() != SRP_OK) { /* Only happens once */ + srp_free(ver); + ver = 0; + goto cleanup_and_exit; + } - ver->username = (char *) malloc(ulen); + ver->username = (char *) srp_alloc(ulen); ver->hash_alg = alg; ver->ng = ng; if (!ver->username) { - free(ver); + srp_free(ver); ver = 0; goto cleanup_and_exit; } @@ -683,11 +725,15 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg, if (bytes_b) { mpz_from_bin(bytes_b, len_b, b); } else { - mpz_fill_random(b); + if (mpz_fill_random(b) != SRP_OK) { + srp_free(ver); + ver = 0; + goto cleanup_and_exit; + } } if (!H_nn(k, alg, ng->N, ng->N, ng->g)) { - free(ver); + srp_free(ver); ver = 0; goto cleanup_and_exit; } @@ -698,7 +744,7 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg, mpz_addm(B, tmp1, tmp2, ng->N, tmp3); if (!H_nn(u, alg, ng->N, A, B)) { - free(ver); + srp_free(ver); ver = 0; goto cleanup_and_exit; } @@ -716,11 +762,11 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg, calculate_H_AMK(alg, ver->H_AMK, A, ver->M, ver->session_key); *len_B = mpz_num_bytes(B); - *bytes_B = (unsigned char*)malloc(*len_B); + *bytes_B = (unsigned char*)srp_alloc(*len_B); if (!*bytes_B) { - free(ver->username); - free(ver); + srp_free(ver->username); + srp_free(ver); ver = 0; *len_B = 0; goto cleanup_and_exit; @@ -730,7 +776,7 @@ struct SRPVerifier *srp_verifier_new(SRP_HashAlgorithm alg, ver->bytes_B = *bytes_B; } else { - free(ver); + srp_free(ver); ver = 0; } @@ -755,10 +801,10 @@ void srp_verifier_delete(struct SRPVerifier *ver) { if (ver) { delete_ng(ver->ng); - free(ver->username); - free(ver->bytes_B); + srp_free(ver->username); + srp_free(ver->bytes_B); memset(ver, 0, sizeof(*ver)); - free(ver); + srp_free(ver); } } @@ -807,14 +853,15 @@ struct SRPUser *srp_user_new(SRP_HashAlgorithm alg, SRP_NGType ng_type, const unsigned char *bytes_password, size_t len_password, const char *n_hex, const char *g_hex) { - struct SRPUser *usr = (struct SRPUser *) malloc(sizeof(struct SRPUser)); + struct SRPUser *usr = (struct SRPUser *) srp_alloc(sizeof(struct SRPUser)); size_t ulen = strlen(username) + 1; size_t uvlen = strlen(username_for_verifier) + 1; if (!usr) goto err_exit; - init_random(); /* Only happens once */ + if (init_random() != SRP_OK) /* Only happens once */ + goto err_exit; usr->hash_alg = alg; usr->ng = new_ng(ng_type, n_hex, g_hex); @@ -823,15 +870,15 @@ struct SRPUser *srp_user_new(SRP_HashAlgorithm alg, SRP_NGType ng_type, mpz_init(usr->A); mpz_init(usr->S); - if (!usr->ng || !usr->a || !usr->A || !usr->S) + if (!usr->ng) goto err_exit; - usr->username = (char*)malloc(ulen); - usr->username_verifier = (char*)malloc(uvlen); - usr->password = (unsigned char*)malloc(len_password); + usr->username = (char*)srp_alloc(ulen); + usr->username_verifier = (char*)srp_alloc(uvlen); + usr->password = (unsigned char*)srp_alloc(len_password); usr->password_len = len_password; - if (!usr->username || !usr->password) + if (!usr->username || !usr->password || !usr->username_verifier) goto err_exit; memcpy(usr->username, username, ulen); @@ -849,15 +896,15 @@ err_exit: mpz_clear(usr->a); mpz_clear(usr->A); mpz_clear(usr->S); - if (usr->username) - free(usr->username); - if (usr->username_verifier) - free(usr->username_verifier); + if (usr->ng) + delete_ng(usr->ng); + srp_free(usr->username); + srp_free(usr->username_verifier); if (usr->password) { memset(usr->password, 0, usr->password_len); - free(usr->password); + srp_free(usr->password); } - free(usr); + srp_free(usr); } return 0; @@ -876,15 +923,15 @@ void srp_user_delete(struct SRPUser *usr) memset(usr->password, 0, usr->password_len); - free(usr->username); - free(usr->username_verifier); - free(usr->password); + srp_free(usr->username); + srp_free(usr->username_verifier); + srp_free(usr->password); if (usr->bytes_A) - free(usr->bytes_A); + srp_free(usr->bytes_A); memset(usr, 0, sizeof(*usr)); - free(usr); + srp_free(usr); } } @@ -917,33 +964,38 @@ size_t srp_user_get_session_key_length(struct SRPUser *usr) /* Output: username, bytes_A, len_A */ -void srp_user_start_authentication(struct SRPUser *usr, char **username, +SRP_Result srp_user_start_authentication(struct SRPUser *usr, char **username, const unsigned char *bytes_a, size_t len_a, unsigned char **bytes_A, size_t *len_A) { if (bytes_a) { mpz_from_bin(bytes_a, len_a, usr->a); } else { - mpz_fill_random(usr->a); + if (mpz_fill_random(usr->a) != SRP_OK) + goto error_and_exit; } mpz_powm(usr->A, usr->ng->g, usr->a, usr->ng->N); *len_A = mpz_num_bytes(usr->A); - *bytes_A = (unsigned char*)malloc(*len_A); + *bytes_A = (unsigned char*)srp_alloc(*len_A); - if (!*bytes_A) { - *len_A = 0; - *bytes_A = 0; - *username = 0; - return; - } + if (!*bytes_A) + goto error_and_exit; mpz_to_bin(usr->A, *bytes_A); usr->bytes_A = *bytes_A; if (username) *username = usr->username; + + return SRP_OK; + +error_and_exit: + *len_A = 0; + *bytes_A = 0; + *username = 0; + return SRP_ERR; } diff --git a/src/util/srp.h b/src/util/srp.h index 15a2b8a6..c876e70e 100644 --- a/src/util/srp.h +++ b/src/util/srp.h @@ -78,6 +78,22 @@ typedef enum SRP_SHA512*/ } SRP_HashAlgorithm; +typedef enum +{ + SRP_OK, + SRP_ERR, +} SRP_Result; + +/* Sets the memory functions used by srp. + * Note: this doesn't set the memory functions used by gmp, + * but it is supported to have different functions for srp and gmp. + * Don't call this after you have already allocated srp structures. + */ +void srp_set_memory_functions( + void *(*new_srp_alloc) (size_t), + void *(*new_srp_realloc) (void *, size_t), + void (*new_srp_free) (void *)); + /* Out: bytes_v, len_v * * The caller is responsible for freeing the memory allocated for bytes_v @@ -86,8 +102,11 @@ typedef enum * If provided, they must contain ASCII text of the hexidecimal notation. * * If bytes_s == NULL, it is filled with random data. The caller is responsible for freeing. + * + * Returns SRP_OK on success, and SRP_ERR on error. + * bytes_s might be in this case invalid, don't free it. */ -void srp_create_salted_verification_key( SRP_HashAlgorithm alg, +SRP_Result srp_create_salted_verification_key( SRP_HashAlgorithm alg, SRP_NGType ng_type, const char *username_for_verifier, const unsigned char *password, size_t len_password, unsigned char **bytes_s, size_t *len_s, @@ -101,6 +120,8 @@ void srp_create_salted_verification_key( SRP_HashAlgorithm alg, * The n_hex and g_hex parameters should be 0 unless SRP_NG_CUSTOM is used for ng_type * * If bytes_b == NULL, random data is used for b. + * + * Returns pointer to SRPVerifier on success, and NULL on error. */ struct SRPVerifier* srp_verifier_new(SRP_HashAlgorithm alg, SRP_NGType ng_type, const char *username, @@ -114,7 +135,7 @@ struct SRPVerifier* srp_verifier_new(SRP_HashAlgorithm alg, SRP_NGType ng_type, void srp_verifier_delete( struct SRPVerifier* ver ); - +// srp_verifier_verify_session must have been called before int srp_verifier_is_authenticated( struct SRPVerifier* ver ); @@ -128,7 +149,9 @@ const unsigned char* srp_verifier_get_session_key( struct SRPVerifier* ver, size_t srp_verifier_get_session_key_length(struct SRPVerifier* ver); -/* user_M must be exactly srp_verifier_get_session_key_length() bytes in size */ +/* Verifies session, on success, it writes bytes_HAMK. + * user_M must be exactly srp_verifier_get_session_key_length() bytes in size + */ void srp_verifier_verify_session( struct SRPVerifier* ver, const unsigned char* user_M, unsigned char** bytes_HAMK ); @@ -154,7 +177,7 @@ size_t srp_user_get_session_key_length(struct SRPUser* usr); /* Output: username, bytes_A, len_A. If you don't want it get written, set username to NULL. * If bytes_a == NULL, random data is used for a. */ -void srp_user_start_authentication(struct SRPUser* usr, char** username, +SRP_Result srp_user_start_authentication(struct SRPUser* usr, char** username, const unsigned char* bytes_a, size_t len_a, unsigned char** bytes_A, size_t* len_A); diff --git a/src/util/string.cpp b/src/util/string.cpp index 4c0420d7..d2846739 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -29,15 +29,156 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include +#ifndef _WIN32 + #include +#else + #define _WIN32_WINNT 0x0501 + #include +#endif + +#if defined(_ICONV_H_) && (defined(__FreeBSD__) || defined(__NetBSD__) || \ + defined(__OpenBSD__) || defined(__DragonFly__)) + #define BSD_ICONV_USED +#endif + static bool parseHexColorString(const std::string &value, video::SColor &color); static bool parseNamedColorString(const std::string &value, video::SColor &color); +#ifndef _WIN32 + +bool convert(const char *to, const char *from, char *outbuf, + size_t outbuf_size, char *inbuf, size_t inbuf_size) +{ + iconv_t cd = iconv_open(to, from); + +#ifdef BSD_ICONV_USED + const char *inbuf_ptr = inbuf; +#else + char *inbuf_ptr = inbuf; +#endif + + char *outbuf_ptr = outbuf; + + size_t *inbuf_left_ptr = &inbuf_size; + size_t *outbuf_left_ptr = &outbuf_size; + + size_t old_size = inbuf_size; + while (inbuf_size > 0) { + iconv(cd, &inbuf_ptr, inbuf_left_ptr, &outbuf_ptr, outbuf_left_ptr); + if (inbuf_size == old_size) { + iconv_close(cd); + return false; + } + old_size = inbuf_size; + } + + iconv_close(cd); + return true; +} + +std::wstring utf8_to_wide(const std::string &input) +{ + size_t inbuf_size = input.length() + 1; + // maximum possible size, every character is sizeof(wchar_t) bytes + size_t outbuf_size = (input.length() + 1) * sizeof(wchar_t); + + char *inbuf = new char[inbuf_size]; + memcpy(inbuf, input.c_str(), inbuf_size); + char *outbuf = new char[outbuf_size]; + memset(outbuf, 0, outbuf_size); + + if (!convert("WCHAR_T", "UTF-8", outbuf, outbuf_size, inbuf, inbuf_size)) { + infostream << "Couldn't convert UTF-8 string 0x" << hex_encode(input) + << " into wstring" << std::endl; + delete[] inbuf; + delete[] outbuf; + return L""; + } + std::wstring out((wchar_t *)outbuf); + + delete[] inbuf; + delete[] outbuf; + + return out; +} + +#ifdef __ANDROID__ +// TODO: this is an ugly fix for wide_to_utf8 somehow not working on android +std::string wide_to_utf8(const std::wstring &input) +{ + return wide_to_narrow(input); +} +#else +std::string wide_to_utf8(const std::wstring &input) +{ + size_t inbuf_size = (input.length() + 1) * sizeof(wchar_t); + // maximum possible size: utf-8 encodes codepoints using 1 up to 6 bytes + size_t outbuf_size = (input.length() + 1) * 6; + + char *inbuf = new char[inbuf_size]; + memcpy(inbuf, input.c_str(), inbuf_size); + char *outbuf = new char[outbuf_size]; + memset(outbuf, 0, outbuf_size); + + if (!convert("UTF-8", "WCHAR_T", outbuf, outbuf_size, inbuf, inbuf_size)) { + infostream << "Couldn't convert wstring 0x" << hex_encode(inbuf, inbuf_size) + << " into UTF-8 string" << std::endl; + delete[] inbuf; + delete[] outbuf; + return ""; + } + std::string out(outbuf); + + delete[] inbuf; + delete[] outbuf; + + return out; +} + +#endif +#else // _WIN32 + +std::wstring utf8_to_wide(const std::string &input) +{ + size_t outbuf_size = input.size() + 1; + wchar_t *outbuf = new wchar_t[outbuf_size]; + memset(outbuf, 0, outbuf_size * sizeof(wchar_t)); + MultiByteToWideChar(CP_UTF8, 0, input.c_str(), input.size(), + outbuf, outbuf_size); + std::wstring out(outbuf); + delete[] outbuf; + return out; +} + +std::string wide_to_utf8(const std::wstring &input) +{ + size_t outbuf_size = (input.size() + 1) * 6; + char *outbuf = new char[outbuf_size]; + memset(outbuf, 0, outbuf_size); + WideCharToMultiByte(CP_UTF8, 0, input.c_str(), input.size(), + outbuf, outbuf_size, NULL, NULL); + std::string out(outbuf); + delete[] outbuf; + return out; +} + +#endif // _WIN32 + +wchar_t *utf8_to_wide_c(const char *str) +{ + std::wstring ret = utf8_to_wide(std::string(str)).c_str(); + size_t len = ret.length(); + wchar_t *ret_c = new wchar_t[len + 1]; + memset(ret_c, 0, (len + 1) * sizeof(wchar_t)); + memcpy(ret_c, ret.c_str(), len * sizeof(wchar_t)); + return ret_c; +} // You must free the returned string! // The returned string is allocated using new wchar_t *narrow_to_wide_c(const char *str) { - wchar_t* nstr = 0; + wchar_t *nstr = NULL; #if defined(_WIN32) int nResult = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR) str, -1, 0, 0); if (nResult == 0) { @@ -48,7 +189,7 @@ wchar_t *narrow_to_wide_c(const char *str) } #else size_t len = strlen(str); - nstr = new wchar_t[len+1]; + nstr = new wchar_t[len + 1]; std::wstring intermediate = narrow_to_wide(str); memset(nstr, 0, (len + 1) * sizeof(wchar_t)); @@ -446,8 +587,8 @@ ColorContainer::ColorContainer() colors["greenyellow"] = 0xadff2f; colors["honeydew"] = 0xf0fff0; colors["hotpink"] = 0xff69b4; - colors["indianred "] = 0xcd5c5c; - colors["indigo "] = 0x4b0082; + colors["indianred"] = 0xcd5c5c; + colors["indigo"] = 0x4b0082; colors["ivory"] = 0xfffff0; colors["khaki"] = 0xf0e68c; colors["lavender"] = 0xe6e6fa; diff --git a/src/util/string.h b/src/util/string.h index 8a415d01..b1b37537 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -32,6 +32,9 @@ with this program; if not, write to the Free Software Foundation, Inc., #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) +// Checks whether a byte is an inner byte for an utf-8 multibyte sequence +#define IS_UTF8_MULTB_INNER(x) (((unsigned char)x >= 0x80) && ((unsigned char)x < 0xc0)) + typedef std::map StringMap; struct FlagDesc { @@ -39,10 +42,20 @@ struct FlagDesc { u32 flag; }; +// try not to convert between wide/utf8 encodings; this can result in data loss +// try to only convert between them when you need to input/output stuff via Irrlicht +std::wstring utf8_to_wide(const std::string &input); +std::string wide_to_utf8(const std::wstring &input); + +wchar_t *utf8_to_wide_c(const char *str); + +// NEVER use those two functions unless you have a VERY GOOD reason to +// they just convert between wide and multibyte encoding +// multibyte encoding depends on current locale, this is no good, especially on Windows + // You must free the returned string! // The returned string is allocated using new wchar_t *narrow_to_wide_c(const char *str); - std::wstring narrow_to_wide(const std::string &mbs); std::string wide_to_narrow(const std::wstring &wcs); @@ -403,7 +416,10 @@ inline bool string_allowed_blacklist(const std::string &str, * every \p row_len characters whether it breaks a word or not. It is * intended to be used for, for example, showing paths in the GUI. * - * @param from The string to be wrapped into rows. + * @note This function doesn't wrap inside utf-8 multibyte sequences and also + * counts multibyte sequences correcly as single characters. + * + * @param from The (utf-8) string to be wrapped into rows. * @param row_len The row length (in characters). * @return A new string with the wrapping applied. */ @@ -412,9 +428,14 @@ inline std::string wrap_rows(const std::string &from, { std::string to; + size_t character_idx = 0; for (size_t i = 0; i < from.size(); i++) { - if (i != 0 && i % row_len == 0) - to += '\n'; + if (!IS_UTF8_MULTB_INNER(from[i])) { + // Wrap string after last inner byte of char + if (character_idx > 0 && character_idx % row_len == 0) + to += '\n'; + character_idx++; + } to += from[i]; } diff --git a/src/util/thread.h b/src/util/thread.h index 01eaad1d..79eb132f 100644 --- a/src/util/thread.h +++ b/src/util/thread.h @@ -21,51 +21,49 @@ with this program; if not, write to the Free Software Foundation, Inc., #define UTIL_THREAD_HEADER #include "../irrlichttypes.h" -#include "../jthread/jthread.h" -#include "../jthread/jmutex.h" -#include "../jthread/jmutexautolock.h" +#include "../threading/thread.h" +#include "../threading/mutex.h" +#include "../threading/mutex_auto_lock.h" #include "porting.h" +#include "log.h" template -class MutexedVariable -{ +class MutexedVariable { public: MutexedVariable(T value): m_value(value) - { - } + {} T get() { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); return m_value; } void set(T value) { - JMutexAutoLock lock(m_mutex); + MutexAutoLock lock(m_mutex); m_value = value; } - + // You'll want to grab this in a SharedPtr - JMutexAutoLock * getLock() + MutexAutoLock *getLock() { - return new JMutexAutoLock(m_mutex); + return new MutexAutoLock(m_mutex); } - + // You pretty surely want to grab the lock when accessing this T m_value; private: - JMutex m_mutex; + Mutex m_mutex; }; /* A single worker thread - multiple client threads queue framework. */ template -class GetResult -{ +class GetResult { public: Key key; T item; @@ -73,34 +71,27 @@ public: }; template -class ResultQueue: public MutexedQueue< GetResult > -{ +class ResultQueue : public MutexedQueue > { }; template -class CallerInfo -{ +class CallerInfo { public: Caller caller; Data data; - ResultQueue< Key, T, Caller, Data>* dest; + ResultQueue *dest; }; template -class GetRequest -{ +class GetRequest { public: - GetRequest() - { - } - GetRequest(Key a_key) - { + GetRequest() {} + ~GetRequest() {} + + GetRequest(Key a_key) { key = a_key; } - ~GetRequest() - { - } - + Key key; std::list > callers; }; @@ -113,8 +104,7 @@ public: * @param CallerData data passed back to caller */ template -class RequestQueue -{ +class RequestQueue { public: bool empty() { @@ -122,40 +112,36 @@ public: } void add(Key key, Caller caller, CallerData callerdata, - ResultQueue *dest) + ResultQueue *dest) { + typename std::deque >::iterator i; + typename std::list >::iterator j; + { - JMutexAutoLock lock(m_queue.getMutex()); + MutexAutoLock lock(m_queue.getMutex()); /* If the caller is already on the list, only update CallerData */ - for(typename std::deque< GetRequest >::iterator - i = m_queue.getQueue().begin(); - i != m_queue.getQueue().end(); ++i) - { + for (i = m_queue.getQueue().begin(); i != m_queue.getQueue().end(); ++i) { GetRequest &request = *i; + if (request.key != key) + continue; - if(request.key == key) - { - for(typename std::list< CallerInfo >::iterator - i = request.callers.begin(); - i != request.callers.end(); ++i) - { - CallerInfo &ca = *i; - if(ca.caller == caller) - { - ca.data = callerdata; - return; - } + for (j = request.callers.begin(); j != request.callers.end(); ++j) { + CallerInfo &ca = *j; + if (ca.caller == caller) { + ca.data = callerdata; + return; } - CallerInfo ca; - ca.caller = caller; - ca.data = callerdata; - ca.dest = dest; - request.callers.push_back(ca); - return; } + + CallerInfo ca; + ca.caller = caller; + ca.data = callerdata; + ca.dest = dest; + request.callers.push_back(ca); + return; } } @@ -170,7 +156,7 @@ public: ca.data = callerdata; ca.dest = dest; request.callers.push_back(ca); - + m_queue.push_back(request); } @@ -184,13 +170,11 @@ public: return m_queue.pop_frontNoEx(); } - void pushResult(GetRequest req, - T res) { - - for(typename std::list< CallerInfo >::iterator + void pushResult(GetRequest req, T res) + { + for (typename std::list >::iterator i = req.callers.begin(); - i != req.callers.end(); ++i) - { + i != req.callers.end(); ++i) { CallerInfo &ca = *i; GetResult result; @@ -205,7 +189,50 @@ public: } private: - MutexedQueue< GetRequest > m_queue; + MutexedQueue > m_queue; +}; + +class UpdateThread : public Thread +{ +public: + UpdateThread(const std::string &name) : Thread(name + "Update") {} + ~UpdateThread() {} + + void deferUpdate() { m_update_sem.post(); } + + void stop() + { + Thread::stop(); + + // give us a nudge + m_update_sem.post(); + } + + void *run() + { + DSTACK(FUNCTION_NAME); + BEGIN_DEBUG_EXCEPTION_HANDLER + + while (!stopRequested()) { + m_update_sem.wait(); + // Set semaphore to 0 + while (m_update_sem.wait(0)); + + if (stopRequested()) break; + + doUpdate(); + } + + END_DEBUG_EXCEPTION_HANDLER + + return NULL; + } + +protected: + virtual void doUpdate() = 0; + +private: + Semaphore m_update_sem; }; #endif diff --git a/src/version.cpp b/src/version.cpp index 741e7dd4..3280c3b0 100644 --- a/src/version.cpp +++ b/src/version.cpp @@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #if defined(__ANDROID__) #include "android_version.h" + #include "android_version_githash.h" #elif defined(USE_CMAKE_CONFIG_H) #include "cmake_config_githash.h" #endif diff --git a/src/voxel.cpp b/src/voxel.cpp index c15531a5..000a40e3 100644 --- a/src/voxel.cpp +++ b/src/voxel.cpp @@ -390,7 +390,6 @@ void VoxelManipulator::unspreadLight(enum LightBank bank, v3s16 p, u8 oldlight, } } -#if 1 /* Goes recursively through the neighbours of the node. @@ -421,115 +420,6 @@ void VoxelManipulator::unspreadLight(enum LightBank bank, unspreadLight(bank, j->first, j->second, light_sources, nodemgr); } } -#endif - -#if 0 -/* - Goes recursively through the neighbours of the node. - - Alters only transparent nodes. - - If the lighting of the neighbour is lower than the lighting of - the node was (before changing it to 0 at the step before), the - lighting of the neighbour is set to 0 and then the same stuff - repeats for the neighbour. - - The ending nodes of the routine are stored in light_sources. - This is useful when a light is removed. In such case, this - routine can be called for the light node and then again for - light_sources to re-light the area without the removed light. - - values of from_nodes are lighting values. -*/ -void VoxelManipulator::unspreadLight(enum LightBank bank, - core::map & from_nodes, - core::map & light_sources) -{ - v3s16 dirs[6] = { - v3s16(0,0,1), // back - v3s16(0,1,0), // top - v3s16(1,0,0), // right - v3s16(0,0,-1), // front - v3s16(0,-1,0), // bottom - v3s16(-1,0,0), // left - }; - - if(from_nodes.size() == 0) - return; - - core::map unlighted_nodes; - core::map::Iterator j; - j = from_nodes.getIterator(); - - for(; j.atEnd() == false; j++) - { - v3s16 pos = j.getNode()->getKey(); - - addArea(VoxelArea(pos - v3s16(1,1,1), pos + v3s16(1,1,1))); - - //MapNode &n = m_data[m_area.index(pos)]; - - u8 oldlight = j.getNode()->getValue(); - - // Loop through 6 neighbors - for(u16 i=0; i<6; i++) - { - // Get the position of the neighbor node - v3s16 n2pos = pos + dirs[i]; - - u32 n2i = m_area.index(n2pos); - - if(m_flags[n2i] & VOXELFLAG_NO_DATA) - continue; - - MapNode &n2 = m_data[n2i]; - - /* - If the neighbor is dimmer than what was specified - as oldlight (the light of the previous node) - */ - if(n2.getLight(bank, nodemgr) < oldlight) - { - /* - And the neighbor is transparent and it has some light - */ - if(nodemgr->get(n2).light_propagates && n2.getLight(bank, nodemgr) != 0) - { - /* - Set light to 0 and add to queue - */ - - u8 current_light = n2.getLight(bank, nodemgr); - n2.setLight(bank, 0); - - unlighted_nodes.insert(n2pos, current_light); - - /* - Remove from light_sources if it is there - NOTE: This doesn't happen nearly at all - */ - /*if(light_sources.find(n2pos)) - { - std::cout<<"Removed from light_sources"< 0) - unspreadLight(bank, unlighted_nodes, light_sources); -} -#endif void VoxelManipulator::spreadLight(enum LightBank bank, v3s16 p, INodeDefManager *nodemgr) @@ -594,36 +484,9 @@ void VoxelManipulator::spreadLight(enum LightBank bank, v3s16 p, } } -#if 0 -/* - Lights neighbors of from_nodes, collects all them and then - goes on recursively. - - NOTE: This is faster on small areas but will overflow the - stack on large areas. Thus it is not used. -*/ -void VoxelManipulator::spreadLight(enum LightBank bank, - core::map & from_nodes) -{ - if(from_nodes.size() == 0) - return; - - core::map lighted_nodes; - core::map::Iterator j; - j = from_nodes.getIterator(); - - for(; j.atEnd() == false; j++) - { - v3s16 pos = j.getNode()->getKey(); - - spreadLight(bank, pos); - } -} -#endif const MapNode VoxelManipulator::ContentIgnoreNode = MapNode(CONTENT_IGNORE); -#if 1 /* Lights neighbors of from_nodes, collects all them and then goes on recursively. @@ -716,6 +579,5 @@ void VoxelManipulator::spreadLight(enum LightBank bank, if(!lighted_nodes.empty()) spreadLight(bank, lighted_nodes, nodemgr); } -#endif //END diff --git a/src/wieldmesh.cpp b/src/wieldmesh.cpp index 9230e0e1..d1bd6fc8 100644 --- a/src/wieldmesh.cpp +++ b/src/wieldmesh.cpp @@ -34,10 +34,10 @@ with this program; if not, write to the Free Software Foundation, Inc., #define WIELD_SCALE_FACTOR 30.0 #define WIELD_SCALE_FACTOR_EXTRUDED 40.0 -#define MIN_EXTRUSION_MESH_RESOLUTION 32 // not 16: causes too many "holes" +#define MIN_EXTRUSION_MESH_RESOLUTION 16 #define MAX_EXTRUSION_MESH_RESOLUTION 512 -static scene::IMesh* createExtrusionMesh(int resolution_x, int resolution_y) +static scene::IMesh *createExtrusionMesh(int resolution_x, int resolution_y) { const f32 r = 0.5; @@ -114,7 +114,9 @@ static scene::IMesh* createExtrusionMesh(int resolution_x, int resolution_y) mesh->addMeshBuffer(buf); buf->drop(); scaleMesh(mesh, scale); // also recalculates bounding box - return mesh; + scene::IMesh *newmesh = createForsythOptimizedMesh(mesh); + mesh->drop(); + return newmesh; } /* @@ -281,7 +283,9 @@ void WieldMeshSceneNode::setExtruded(const std::string &imagename, // Customize material video::SMaterial &material = m_meshnode->getMaterial(0); - material.setTexture(0, tsrc->getTextureForMesh(imagename)); + material.setTexture(0, tsrc->getTexture(imagename)); + material.TextureLayer[0].TextureWrapU = video::ETC_CLAMP_TO_EDGE; + material.TextureLayer[0].TextureWrapV = video::ETC_CLAMP_TO_EDGE; material.MaterialType = m_material_type; material.setFlag(video::EMF_BACK_FACE_CULLING, true); // Enable bi/trilinear filtering only for high resolution textures @@ -297,31 +301,25 @@ void WieldMeshSceneNode::setExtruded(const std::string &imagename, #if (IRRLICHT_VERSION_MAJOR >= 1 && IRRLICHT_VERSION_MINOR >= 8) || IRRLICHT_VERSION_MAJOR >= 2 material.setFlag(video::EMF_USE_MIP_MAPS, false); #endif - -#if 0 -//// TODO(RealBadAngel): Reactivate when shader is added for wield items - if (m_enable_shaders) - material.setTexture(2, tsrc->getTexture("disable_img.png")); -#endif + if (m_enable_shaders) { + material.setTexture(2, tsrc->getShaderFlagsTexture(false)); + } } void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef) { ITextureSource *tsrc = gamedef->getTextureSource(); IItemDefManager *idef = gamedef->getItemDefManager(); - //IShaderSource *shdrsrc = gamedef->getShaderSource(); + IShaderSource *shdrsrc = gamedef->getShaderSource(); INodeDefManager *ndef = gamedef->getNodeDefManager(); const ItemDefinition &def = item.getDefinition(idef); const ContentFeatures &f = ndef->get(def.name); content_t id = ndef->getId(def.name); -#if 0 -//// TODO(RealBadAngel): Reactivate when shader is added for wield items if (m_enable_shaders) { - u32 shader_id = shdrsrc->getShader("nodes_shader", TILE_MATERIAL_BASIC, NDT_NORMAL); + u32 shader_id = shdrsrc->getShader("wielded_shader", TILE_MATERIAL_BASIC, NDT_NORMAL); m_material_type = shdrsrc->getShaderInfo(shader_id).material; } -#endif // If wield_image is defined, it overrides everything else if (def.wield_image != "") { @@ -345,8 +343,6 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef) } else if (f.drawtype == NDT_NORMAL || f.drawtype == NDT_ALLFACES) { setCube(f.tiles, def.wield_scale, tsrc); } else { - //// TODO: Change false in the following constructor args to - //// appropriate value when shader is added for wield items (if applicable) MeshMakeData mesh_make_data(gamedef, false); MapNode mesh_make_node(id, 255, 0); mesh_make_data.fillSingleNode(&mesh_make_node); @@ -376,8 +372,6 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef) material.setTexture(0, f.tiles[i].texture); } material.MaterialType = m_material_type; -#if 0 -//// TODO(RealBadAngel): Reactivate when shader is added for wield items if (m_enable_shaders) { if (f.tiles[i].normal_texture) { if (animated) { @@ -386,12 +380,9 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef) } else { material.setTexture(1, f.tiles[i].normal_texture); } - material.setTexture(2, tsrc->getTexture("enable_img.png")); - } else { - material.setTexture(2, tsrc->getTexture("disable_img.png")); } + material.setTexture(2, f.tiles[i].flags_texture); } -#endif } return; } @@ -408,6 +399,7 @@ void WieldMeshSceneNode::setColor(video::SColor color) { assert(!m_lighting); setMeshColor(m_meshnode->getMesh(), color); + shadeMeshFaces(m_meshnode->getMesh()); } void WieldMeshSceneNode::render() diff --git a/src/wieldmesh.h b/src/wieldmesh.h index 0422e227..4f4ab2e0 100644 --- a/src/wieldmesh.h +++ b/src/wieldmesh.h @@ -48,6 +48,9 @@ public: // Must only be used if the constructor was called with lighting = false void setColor(video::SColor color); + scene::IMesh *getMesh() + { return m_meshnode->getMesh(); } + virtual void render(); virtual const core::aabbox3d& getBoundingBox() const diff --git a/textures/base/pack/ad_label1.png b/textures/base/pack/ad_label1.png deleted file mode 100644 index ee35335e544cd5b2505a817b763cbd18c318258c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15009 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%0DNj^Rv5g3 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 Z-{He3^6|B(>DwRR>1gU}RH)g8{|_ntAq4;c diff --git a/textures/base/pack/ad_label4.png b/textures/base/pack/ad_label4.png deleted file mode 100644 index b9e07d59df093fd501fe54f3ec7cfdc3d3ae3b52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19744 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≦-PLdx;?u=F(qHAl7lnZQ)1eXe@@YZgtGj{kH} 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 KdSyEH(f diff --git a/textures/base/pack/ad_label6.png b/textures/base/pack/ad_label6.png deleted file mode 100644 index 5d64df7deb6117eeabd77ebefc5c178a7c24f96b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25092 zcmce7^;?tg8#XX{bW3j3=z-E*N{17qTSQRl7|j?Vf-o9s1XLtNq-%h*fCHsdx*JBm zeEh!ezwqujwr9`w!*l0#p67L+SB#;)201A+DGm+}xt69n3+X9d72(|{kii>z zcfog3(Nn>}`I-Q{vLm>=$Mu3~sNz%%v2NVmfE+YodN?=%yf`>v5jZ#(cRz)#MBO?shwG;Ao|}^X9x2X;1nv`(b8i9&_m_SH+Xn>r%?p-f&x8+Pn8K$d97seV8uYK z^%k}DmNN!bUuG@MOC{)YRWf#tlNok}&6D6opZkG-1~W#uu1dYhd|F2C)fxRod6Rwt)`kUg+ zf7sG#Xl>Ql_^&vH0t_?#aJo&BGub20=2GSB05U=~m*ny#Jf0jN4#I`lA^NBJ#YTs)+bm z8^OiLj%JhPCND)YD6iu?9M8s>07;#Re~$}!uXl5mm$>E1S4~~rf?xhz6>SS*hWBHy zbbU0xP?S!ir3_RSEkI(7_&ZS=m8xAh`3yCi0P>{#U}x;pKv02z`m4z3ba?X@pk)*P zDQHIK9yiS{v3+f9|v{p=wCViA=>pQ%9n+d}n3-aVMYh=V+kCSULA zn+8Vq1OR(jOX#VN#J^=TP(^*DWE0TW_v(cqr6*&=TLti$|C;-ug}(d~!l9_nl4{X1 zNqHtRn;D9}0b4b*&qjbR31Ku@woA`7HvnD~oekXe3Y>oxlhmtNrmsG;cpN%55i%-; z4Gn-7e9tRn&lM=VS`n`~ROVlyF4;fVGHEy7`fAtjJW-4;y#_6^p66nJd0EvN+y7gR zA@AR1-1=i6ffT6WP>N@LB;{EuHyWT%jMXz6*$fBaw8M3g#^3EUsilMQtQ+aIeURM)Hh&mFn*{J(>Rv0nTz;a-+Ky@R1>Gmoz-J9)KODdof@`t} zv_6@3bID~>4t!NQLLu*Q?2&Qbr_xvUQZJUnb%=E6@zCF9p?{ zBJ2OS_mK3~Qe;{pEI7O?o?Hs@J!bTLr1CDt{SOdbQuUSpRWRdeZPYoy{k6$z&l{k} z(t9zgRm#3;+xdKs94a>+q5nmNP_qD%0c(B@QK1sypSwg(XV0uFuLijx@#~P2213xU z^t=ksC6Oof^&eAi>2zf|h4~1Z4rO-y(o$%qmDepdCL~OK+Pq)0oqv(e>v8m3YIebV zq}`vwE1BTVcw+OVmE^fdYV8$4T;7NK=f(A<>|QKwj5h^Pzjcc4 z02Ble8<}mgww=g710pO7P)FjdxnvGK=uN1tv(3aC@yH~Z_5a^wn3C- z185$XZ=1+pM`m0{aITuK3mnxHZs;)MW zgmPn}(~4qs)$`wWhvW(p%e5j$w`|85l^63GDgs*u_zmGa%Q6JGGT>&QA>q|9j(@ue znJ-zy{*QfUDd|JNx-{L1%J1*_eA4r@bi#RSR;Dn@UHu6AGqnRDDp5>>!84+|(1ebU z>B^~#FO(Kirt^+z(&UGZKK@LH4%kaq@|M5eL=gAt%6|}R=$~apV!iqSSQ?0l_WuGlTK;2??J!bGp~9% zuZqZbe(hhk_r1C5J*myxh*XO6NvNh-7@kJVO@dtbxqlwR{aG|YF0?bI!&j4KhxAqi z{Hcq(kbG0W{Wkod?U_?cpyoP0^>LVxs=+NxG5DJ3d+%-6`enV8}-VGfrpXI|i5muVfxG2Y&Zd+f}4WCKpJHe50|@@P$eaK+z1; z(gD@r;rpezIdkj>kpy<4A22TA75oIULtCmMX8)0aE2oR$L_R>l>tbkp=VBJ`lSh9% zmzHlZ*+%f1u#_X$n@fwSrkDn9M=M;gjSheUz1R%fjETFk5?bm?6fU;A*&ov7-*PvV z*Ag(Ld^!VuEl0xAujRqfap;J-IJ5QrQWGE$@jVrjJ6NClAt$3|D296XQrc7%Lt9ml z>Am7*O2aQ)fddvUma z96T2j_*RSG!B&rGLlbofW;YP<)OdB<&T=)-A|+c3k`!dajDf;cJ^D! zIc2CbMZR=OPamIn$eH)j`$hKvMoUHVQvJVUFZ_sTZgqHAHh6?~e-A%WZP`Grks3AP zG_c6_(B^q9ZMfOFnY~dWms{;XGhwf$&?TcIjU;qTIEa_vHS@KrmnJzGDBAEI^w7Y_ zH>zwll9NU?G^hJK51%=3R{)nsTkXJ*F9_$#LN#|f`}Cog^jA&t-b0!$lZYfJ`nS+N zo%-SX|E~*f_Ayuv-V25LDO$XWj*pR5pBQIa*{dO{ z==bg+Vr3x&wcgRAdHbV%xouKs7fC@fj4JLz;+5pTyVZ7Cl_QR@E8VD5ddn~PrTXYa zjQgU5G&Mop6^@Kw`z#<|d3Z2g=~kLM1eiV-F(M*bhU^KHrPqucr9{U64*SrxaNl>)?WYBB*+xtldZHERns{qqMebDyuw|iBoBuMB3KrR@vt_Zjli5 zL_n14X?p5h2rC0?N^Ua_xKis!Mduell8wo$q>}$ZUQYd1Dr5z97}e476_Z`-t|;Oa z9$X)vB2L)K4!z#;eAKjX1pA&?Ra@pQ!eP0U<&RnYcnup2-k&Um9jRWOQooWCqkPY^ z!bGlPowzED^t!x%ws#DNgp8_Oc*@-4nwAR1J^#f>J4=pc0 zdymIb$v$iZP1GuDlSZtp6f1nQQ*|pDCE5=#;MZxoU1<2no^IN%Znh~hlyn1@HeIj2 zRoO6qs`K`u~s#dX1tT z&OunQOOKNK$`89$p6FKwD*=rmYC}`*J&L{QKNUiHW1RLPKD)SM)riZ7-}y|0R?jtE zHh*eTPF$^OQi{X-Fq-cMH1$Xb63&f|MdqJ~@IAmIt%#6i1ifTUxuN)?L^l4m{k0zG zvTy;rG<@U8d?z_p_j+iKLRo+GuiXPODn)mD<&U`VDbnCc%H?T9%N)Eio?s;?pooJvF_@}aZnjbwsUHB^e`uT6?|$C5|Lu@Q1r z4m`hRxGdcJxL=0->^<#pvC4$Ev=#m-`<2vLUk*05_XnYS4}QHh1^WxYia~pmfpYw% z-E;OgF96UnJOk15%7~Qr`b`;ipbJiQMPO`J$GDHeTnh8VGVDLCbTxFRYt}STX_&N)jA29pDeNLc#{z{OjHh+jfUqol7+22}4S(@Z~79IJ&Uq$&*b?qSa_RtqC zqDEEQj?(vOD2}6-5r#74U)o4xla>W70Ik4esLsp#t%mH>3$sactT#6^#Zy9QMlk9yn6cfJwWhCYf;T^ z=&7?uaK^>gV||s3%TyyTXvFJOJj(iH1G%Kf_J98b5Vi5oDgY#dxv>GAC&l{0{{6U+ zigW8mce$Yb2BSiGC8f#Hoq2QtEV6{^s=zy+RDC9~;c4(01OG?C<4loR+OBu%fu?|s zAAhJWKG3z{`|@bFgEiOA=g026uK6D#!tCaDBi@N%+L#$0WkB9r3&}SpMaQ1Kuj&Km@P_q6^ubz(lOejLqI&9{EDFtOWF@R132hX2afXwY@O%o2or)X$*Y|C~u9V zo(lIz5@?@T-6yJ9Sbpy1w*_t77p#;BsPg0z>WpAbRx9vMrr>Qi5>OeM&wwPgSWu-if)l~|aa+P1mG>*p6_)!g?Y&y1jbf3b{&uQ? zy`FdNn*=O=xb%i|AmyE2CjPGst&>c zU9?v;nZBUu<%BQm-z3M$w$XhD!lvUfYq9lP3G@6sWML>}=RJvx1BAE;F++KJydS{k z#~|1AyLJ1RYXHYo=21W!ei<96ID~Ssu3}mA&p6b<(Avv)P>2G`GC)vZur!r!FRwpZi z0@B~vMJOVEQv!5mhAmV^1M}S_UWBlc=HT9*y4MQJ2Qb7lM!nQ4Sb)7DN4(jl8pGH3 z3l|h#=x{g9CbR@}cm9UvKeqUMrI@kZ>2RRuqCvF++i=o}jn?#t&^G45 zuax;0&YI-WBu>i1;g#~N=QK}y)V$eVNZ;G^CTwfUU-0;3g}%Q)5*DFlxUBGo40(wV z^j~aMrJ^VPu<5WK5LT- za|?&^;WSX^RA;gqy)=Lsq>{c2TJ?3x^_G&|y_g&x-x%NdTgLwftxI#$q|gh7Oxr7aK535)nnm~?9!Q?Lgxky z`BeCNY0R1EXgyfWdV)Dntg6ZLu25tx;V$+KTPGdzFX?%3#`W{BE6z&%LY{YCpo0p( zE0HccPp~0S(ckir15sZ0zwRci@NPp}Ilr>D_Hy~BckJ_Ha`YCO*f5_4KsB{BlGL>Z zDHV!DYlTHMK$Pi_p89N;!mD(;d6EE*$th&#; zOt!CdrR5jsslY4~)hus`&&8`0mw0?x+2! zyW`DtF(Jv-6-BwLJ-hjn{v#nF1-^1?iuCbk`c(-bT*a$iyo;?$WQrA>#ygaqZmDyM zMBh9$buK%i(u;aS+&7Dgp1YUV1?F73PEiS@dn*w0(xuNaD|Z)7Wzl;1VK#oR(#$Tr zQs`?FDJ$Q+dR033KTR~-K;m9kJ~Z?`*ar31G5YZh>=G+_t>?T>ZEF2^iVeSMH*Kjc z%nTQ1>JR^xYg8m8MYDwB!pP-y%sD2lB6wvLpQqS9?Y`y;Fa0l;mWxs_Pvm% z6dso2EB!AMID}dO{t(?tNO>SL?;{W24T` zFX)fvuw{b!n;JPh>mM4^FZkeHfSHnw_UhZFJ;uxIW%)yZ=?!KzTO8`=%4qV}LfV6MsG`2OGoBxO`i4 zA;WZDKlVkd8>^$rV-QH3!+A1E7~S)1*T#hs!hWR5OuChqUV-0{B<<|%PwcM|a6~}- zn%_7W;M)SiGJ55;NjEDz5fG=mc%<`Mr@crUwlAJBqu+S-adbC!sOm4EWUj@%3c1Xo z*UcDxOnqH|;o`ClE=oD)-QMObo*@u?u0`~xvr7ac7`>PbDH75$)%q9p2bJQpJ{veg ze~rZCa*1Q>2{Nb8}|O^^2%SZ>}?7K-n8SW;G{Yx zp)7&&EFzN`V<+!HtJ~&pDUG-ncg))VO)L5*Q|s^(Sx719uJ%^sEGSG6^wxlb*XPT!gj3t_Lw7dQwVbrIkYpsEibhCsH>`) zy_e~ZS%eg1l?p>+O|)-*+WxY3?g(`MQZvmV#h$g%C6=J6mVm3deNH)7_#c4};j&2m zaa9@P_mt8<0MXO=XblD85_?4;*8T&uZcW7L)LzCXT}y1f92T*P5~rsjMJG-ph;7>| z>)itSqGkezB4qc}3~fG#(0ST;$A60VuvcfcJnr~CZP%xpEirhlVqCBoi)vysx}XRT zkXic_hrhJo>1GR9enBt;^v{&ZWAy(S6Um6QQF{X=;W1HNc7@~BV}R_9L?8YxPFUB^ z&`FL*Z)Yv$hN`?D53@#nB0OJKJE4cEMZ<^inU8EcVcDiwRewL*5 zMLh#yt8CS}0M+IJM&R$6XQ8h`pNx|3VX89@b<<)6on}l#&TsUsgftUnIYnUexD)E@ zfO~d1#eeLT>F8`Z?elRz4>mmvx3GA-?qEyD1XG+2k4u#=p$f2M76rr)4#;EJJbGj9 z!tH|(`46S|r;%09zo$4tg+g?g11Yn!14lRSoAK;~$0Qejhj!F3IlH=jnq5(Kf7Ot3 z%HO5lkZd~NT7ti-0(tb)SEF{;*g=2WUC9qJz}vV+bPL*PW4t+mZlwKwHnuvBvSy}e z%JsSFK-G50D7mK7uC;+*ix9XOCzBdurS`;z-{l?Q>9z>8U|7;>(`YO@8#Ons{HUg^ zGH-BoO`*SUh?PGON*?};-3}oLi%qe%Mx$qpWfPzseqih8L6XDVEf_{_3coN00GxT>P9OHWy1N3`Z?ok<{135s9&sX{A_oS5U{(i9s3t5KRS z6_G!I#p|Nd(|Q=wHwnI%zfL|TWlT!F&NliPQ+TP_`3<0H6#YY^n3ce`?=>b|&;91t z;EsMHk8I(EcHaEM?p}C+eeTUSi_+FJXZ|zk4By9@*R0tbYc&aeQl3-P{5--DB)^OO zEZn&Y<|j?QG_yV>Pn#m>=rDt!Ded$!mK#{Ip1IsfCXT_q+Yl0m8;s{O5jzq$3W9j$ zrDuj3Z_I%%z{d&Fd3ifHkPnMXpQQ@MhGCZHQ%z}sU7P!tv;H{!T_U{gkJgBdH*d79I#wUxRlAz;^_D zVMNb&5!neU>s|{3L>zJ9iQkt6Px+PFzWiIdb&e9N-O_i5TpqZrg7|B^?QH?!P-^p6 zk@>hI&5GFx2#H~ICS}g7=IC@w%dfxhDk<}1(o?j6Z{;3pE-o*zkDB|Yg~3oiqn|f4;rMz}8LNvJ4;>?{qvo%9@!T6_iuZYk_j8_PV-Ih48jfP9`n< z*<09nK!s6hZMR>TB$!qO3(KAJb_Q>uzp?RBMm+zPfBu3`5{OqTJANSHX%Ckq4rHz< z>X^%};)@RYA*Y%a>^?kg$U{<{9x3#9!PmB@({P1MJw1FDkP~8a{_R%pA6RAF;<}Rb z^i=AYQK;QE!(t3U{$ga+(`>iCrdii4@W)1V65CR!uMhlJeD>Bv+Gx~>CO}* zf_NgohnqzfS1Ka!H5E5q+xgt3X!F4=RO|l=f|WFFcFj0mSW#wJK0wBjsW}&d3?Y^br|mL z#yyz9R~|sfd3x<#SQw$V|5|0^ovG{CE>T_@dnjW^n%1}j`1icbZ2%M!6~wnQi*Gfh zS@&wGZkSs1U#^I-{_9`ofOp4dXWEXn9fO{j)>U_p7P*oKrysR){2F3B{H4Swl4|b# znHPBY3PDg@ME~6`z^p`vo$2XAfvLA~P(rEnpqU!5p?l~??xpSMef}?kmbaLeTRI4D zrBA49MuUx(LJs^#Ih&H9F)Y+Hl^5IH8Kr|cIYHgWD9l?`2KxXudXb{%jwKiL(&xp? zXPiQhGFd4;3C@V~OIFfC^pn#Zk!Ebg7KELffjn&-3jgw=abj)y7sQoWqM?tUkOr_l zY7=Ogq-RJ=N~=W(I}{IK7j#4Uzw=wlZSj7AHi-Su%ZP1?IdGO*WE1%jL|ph>+rWpL z3w-;&E6CZuZ2 zBy=(Zd*oi%_Dx%pRXH7})8NZ!F(`(~{9(l_K}vXUhU}(qp^w7t;zN zwgQuzZ3KO-ufvN-OFEQ@l1S!`a+3e_4>IhMmEK{4iwu%<-IscZ6y_$}Y}0MeNhZ=s z4XhA5vkN7;Rj2aD!?;`B=rpyezhSD{o^C$^T(Pl_(V=O>#YY; zdPCkX`;+C=5@&{(SA}C$(a85rfwh9%ShWeWb#{W%-KbBc9ZAEs{iddYa@jX{6z`(P z093O-oEhEwVYglVwh4-#oM1NzzEn0mzh}D|xgq*x zv;f?BwH+__mt;nt@vJgc5E#)WfoH+@!Y$Nhu1A7p@k4oSt{1C5e@k(o-VS~Gfu=3H z>Qkl2-(BKB-#of~+3i^og5#y00hRw!2i+NM5`NEGG$NL5C@)MnnJp4rbPcPIkd2z88hcjFYwx- z_j}LznQCbjRWHW&Ak&`Q9&V0<;?9^$*!R}h8t3b*7#hVq|HVfDj3)ua#JkH27 zBoDH9q)&9M@pxHH^u>ERI7CT_s6E)gYfW1y{QJD7TOPvExM)u)Y~e8`nbA&#sN@_e zI%~6J;X26nzpWQ)g8QC!ll@F*GA~MntyqB3ZU%27a?f^9zQn_@+g~X?1Nst*4W)=3 z(w-;m?0YX&?lspRGe5@@Jj$qi7&K@Av1p80kBNev!ZVIb#CMzS@0{9$hn?6w|qeTN&pn_xzhua$3@tl;PU!wNk#7jXDoI8qmO&_(!3qe62 zEHIsVJQDLwF;}dR+}YKxkt@uNob3zOlEW7vVq%n7RRI)RnpBeH<$|)X-}Q+yKh`?q zwzlRuKAAMHF-zp@xMz1@N@+X5!+f-+?Wyy4MtE207X4Q%d+BNq`6NusegAe`(P`CZ zf@@l(uhVd! zCx2gh;VCHk2>Zhi>?y9k7rDZ=u+5(!^_mW@-8at3aHv2S>8WyRHG~y&)f${EufnpM z8WYMIBkx01c1sQ665`qs;ZWr!gMtaZ7xH*-_o9-@3tm9>r*Ru*PyPZrbKnYe6!ge- z0r#(9!}E`4DS}6VFtN{<6!;HSzP~pFQ^4nB)UC&^8C)m-k?&6b9qDlyzG z;!wA=43?uaRBna|(d{+WK2+Km7_Xt0cz}YEhs&ZHG$#THMN*@yQfDSW8>?GXd)81& zaaW=`-zbbQsK;y#ZV7={pCW_5gExs^g#yyld()j{&s*?cSF4~m-$O&4nLd+QW)j9` zqRY0}-3IYN@t-pYl_d{DD4WeSTN{K6+P4gE@af)0H%+S+{B@uA=KD&wDT$-6Vn}S6 zMVOVen2e?hCTn!^amzqqZ%X3_);35;v_@8a)?#&RRrW*su<}dJkf=5Q%Wiao|3dE^ zM@zcRQpndt14Ylqo;fcEj(xa%?lDy14m5P1OJYYe+K8k)n&+7GjUpegEf$+j)Dl~} zkZwhH!Z|F@ae3QtkaLIdPK(>m!E=LL{eh7F^gzyMC&)CG{D~*1a+mH6YGoI(dRdmI zxlxo*|K@Z_l|${%ZFu2dR8A^TkRLKizx76j@zw;|fBdLg5=VKCdRh8C+SNEYg(sz} z?pessA;}ALd=k#GtgDvsk?VT0lR z72mR4qCZkyl^b;c1UI$0?Mes!Ct`PsD@%9(ybYDn>$hf%a!swKT=*oh;{O2JCcVN? za>`P5p5$FC%B`?o(PaHIhJ_<#XqKW=NAuktL3JYw^G+gR3!#QmpCwBOPoGugm5;Nz z)@K{l{>(j%>nk29Jy&uo!SDP87K*7$`t2+BLnnT&iLg)Ybq>XmD~o@FV2GXvxq{NL zfcu2C^AMgk(z~M|t*@oo^;NMobtK;YMgsna^T*I&bxRrz@M<;PK2^l`MES?}uF2kW zr9z1Xq1qb0=rjeGHdC1p=gvKf2VbNX zhqo55<;=FIT9n*AWFvGfN*xd)vLb^UE1>n`Tl?FWn7LD`)CXSnA)x4@N?UlgI4|{T zi$LlblD4Nfj9cp03FI%Z@ zhrmXAz~^7auyor2#@Y>(u$jK%^j*KDngYy6z=+RRBT<}v>2dNb&RGv4p<%9BF~aam z?aB1#LAkAicUm^1jZ4t+?(~5LA!DZ_noWsd>~Eh!i>{MQ__9gr`?&NY-H^i~+j90-T!}+;T0d%lj`{h|yxM)%n#ms&ywV%F4?n)gcP((W75?Pg zO{a^d8QES}ID}MwSWTPclNCl#KQ5PSi#_7T0N!kpWcv$-^(05EORp=iRR2Ms;JulQ z&-0?qAj^TxG-TEyHbeds#7+Mx`@3v~#o-~gJn2^JJRrsB1235ZgrIz-oA_{Sy2vj8 zy$Xb>lI;KXc@*_z)rtMRKG17PqK7?`$r?G?!F?b!Eqi^`9pvO{;7lxrVob zz3j6us%Q&m$fGIRxSVmytf7$_o!hp~2hth28dFahDO$E_^S07H)U)ut+ZG@Xdc$JF z#BdE-31Uo(LouXB#~Qm$wZ90ra0r=I2pMhM8=qx99sp$5ulexr7-yL3G|B>>`leT; zM0f#<#}3>_AUwq#MF*HmN?gs{=Of<|y>)==N@gyeazVfKN#&Cc*wqpPu5qF>pS6ZA z+d=dz1%KL546~^;{H>v_D1fYxlzmDj|b@!I6$=prsy!Z^67xyA)I zA~l)wd3(bXnE4aU7aP1q;PExvb>+uM7&D;pop|~ zDr)jWiP6kjxu94ijZ!MS!y^=S84<(~SM1ZbFDcMHMag^ZbCWQP^BZ@KvgDpQqt1{7 z+MYR1J)NkVv&N0K1dESgkwah@NxR6I*cJh8D2GjUdLR1GTI=3QC8D!f_wu72l3y$Py~ZxCBO zL#+!zGM3g3P&gd8k694g%d->sbD>79KW|WbPnnK5vr7oRKLH!az4%2>svGrjSS^vw z5KQt`H`EhT?)S+%VmqeFl{ek4TIvTLyKdn8&{s}_*jiF(vg7sbfa;rqj#{JZhwV1- zrEiF{S#UU_;mzhi?yG)B&VP2!L7No0j=3h(awt>lX>xyedj@=CqfB(bCi9r7Odl0L ziyPaP96yFg^eHBM*C2+;YR!!0evDw@>IZAVZtCnNA32ZmzIl=6&wa6=&0j7UG;1Bu z!g`P7+jQmlTq0i5;^+t1yFI&Y*v9Co=<^2eMsi(Ok>EL;=Sn=rEyOIlY1JZY=_Yy} zd*3z#`)J7uVlcgH3-GqV>!xF5Q}eR-#`JH)tv4yff^97kJlDZ9yb5DXwIC}f>6*Fp z`23u%b}(Bj3%_0Q2!=lW0c7xNH78W}=Dy5W8 zNsradd`*5?vgEhR1jh2M0&(L zM%*YAMGG8F(>k6h>U0(frP}=hVj}w8`=Lj{BK6--90ar+pvuJ$U};HL+l)9`AF64; zaW^R$ptbGpc(b2fvCy4gm_TZ$Y_hPShccD?y0*(u?tRfk+06d`q2u>nP95oZ+Lg zsQc}yOniHh^*zcQc(bmJb9y{N@PY$c)TKZQWhBVY!q|{%pKm^Jm1P-ak!zFQ9t};w&2Ga)UtT4 zE>Ydz>NIF&THvkXFaWgqQ?USLSX9nM-rOTg z|By3W*-ZZHD+)!QW*nL8s4%zHf}Nb&=7~9UB*(p#E0|U0V*=j%Zuh$L0d|yw+vsoy zY{G92*!LoDL12SWj$G)%5E8Zal5dp8GshzyQs%KV$u}XzCc@oWTRZbv%j824f@n7J zKxF28$;*{}ECcw95)E`yjuF}a{TKB~DT1A_jYPDN2Hz%e51UAJl^e7o(vD$+rG-D! zwf_Dt>26l%tGZ^Gj-)VKdUr}iR=t^MJ~ixGZE?}MssX22k?QmZI&2zjhf}uI^Dg2D zGLtw*S`Ko=H^d2$iWcRNzm+T#B7d?QR`>+GL$f>xsJrYu(_1N>CR)|$f0~x}3YBuD zXcR)=iAS!jd~<)uqag;1C8Y{x=$MZ}eQNkx@c3eR%4T`a?eRlwbq+!(s~}jA&xqkF zDy*kvK2;QA{TX*4H=3G2VQ%1)?L%Me;c_^=U%OMO-G<7#8QUp+Vx@=gn;;tVy66vC z?STX?40ldjB0dcDmz;2-3zY*W+if4>AOZ#@oRZ;=bss8uSnDMRav|-IK0eH&QcL{r znn~q9@DU58b$xxxIILL{rQ)Y!#*WY%or%~V|MTcm!f|8FUI+0;litH34 z>Zc6pBEAT*;$n7M*iP;gkCTg8kid0k~5pp@4BR)6^=cVFO%iRK0@zW!unsC z`kKp*(s#S2#?O&kw5Gt+z};5e_kCvdShP+&@=8l-4G5(@wnX_4SWFeQr~a^hEKkgx zC9omXGDCjV`t%>Bimfu%$80Uv!j#oajjS@QaE26;WWWjyT`^p5H33(++|}**97RG8 z?d*%h%Y-8w6OYNdloqo?%SwylMeV36+j0IM9s+Gcm{O>dBxZVg9$o-cniEp#XnwIeFl_4i#l30mxs zo}C=`LBT^BIylIyX}<|9Ojh9&X$D1SX~@r2rla2?+;7EA-xKcibYd*3B8q0UhI#wYMD57YQP zmvfcMG^#lw_M?s&{VH#nK~vED+a1GJiETLopC#}|5qL8@v<|0F|4f|1B?O>yl>gMC z_W{QQuw*)Wcvz8ajcdWv%Je|-9t*>}=zthhAlZy8@gb{wrAcQ@$>W6v;2ooM3RGUV z!&aZ*1XBv`MX*NNJ+Y_{EbM6#p>AAFa~p9otRfXZrz33z>|7P}`o1`o;TA_&s^!06 z)Z8Y0n+P?~TC@J8q}=&@sA;NZ@-NRj8yg3={}ER^`S*3zdzUpSFS*I&Md)3~kkeW< zSg9RPr&n<)#jHXhmdrPt+t!3t=J+Ny@fduSUYT@TKljp+)&G5sxwCM{d959 z*6(b%M-8oCWfDfaGxG+sFU9)-C{E7c(k;zskWg-l7 zS+yPK?Mo}P&aD?p^@t*U)4*enit=#!<@P_45{EUOVcvgVsVS4z(M5w1N23#F@Zkkn zRC$BhOb~_jKLLK8OBMYvPf?*cF1B}(_cTYPIzBL9`pl^sz+RUvPDLqdBb6D)mfzz- z@I!f06^KhOw4&|77yWu9SUbo^x_W*)Kib=RXMK6Lja}}|#H7}!R5#7bA?0;q=ZOKT ztJX13c_C(=pJha!W~Z)}U%Gx!8jb-#wXVT5(=W}E0aFW3QxEjECE zy64{BUq+p%e={;TACdJUL{$ASkTuFGWj7{rBd{p3$?l<=vzx_)jZUL44yUiq1x?a? z3%{7_Mi=~S?ZNe|R;ufVEb{@q^*wj{b=Qr39QYbniKXEEr*{7On-h$_x`{Bwh#HgZ zBiboh4@b(rar!@WNg{gT4vJb5;Myj+hNFTkUcW}U(nk`0knf6|8`7`Ld99l8vUU?` zY$EHY@7DpRxvTiDAm>`GEiOTbzXi>yvy_5 z84sOY6b=9hRH}=FR4caJg$+gd+cTa21X9j<1Bp#$5WL__pjU$0lQOFR5?n`=nG+r~ zxtL4L#|r$8|Ih(^YuIbUQk@c(&6Pdyx(zR8zLS$u{wZT4<0+gm4T(-&8K95wpez(R((4**0Px_IRY5Nr4$e0O*XhRGe;G-9FX8f z67LsM*lH0#+n%kb$mb~ldmBJo@o)A=Wk|QAk9}8*GO2o5cti9$!y#L6G!%g}M0jM2Y5NwBK0+J`FA_l0u*<7=L z{!^+)4-G*$yPH4)7uD}q?pMsLmP9Nzk*Cvkn!yQY82WW3Jw-y*cBWoAT1qK5Mcb&)e@6R10bSZnOtI`9Aa(XsDu(W=kMQX33a3WttY6^&NKi#j zjqEG(F%j&9eIP3EV5MursS`qWaH01|x7`4VXYClp5k;nembC-dUToo~+qR1Cq}D|k zF4mQeP$k;-G544ZF;Aeft=?Kq&656cw!4EQ}IDWewoD$};H9D?ASl+263`-u6Q&a5=VNUo%&L0 zx=sAE^r#6-cOT~MKpJZqN~GM~WVNjwzPWSx-yHf(E_44y5~=xcz@IC3++VAy;-Lza zTRse*r{YT^oMcgHjm{bV7P4bq8Ae;d;rRiIi7}Bx$f~K+O9xX8m4_Knwx7~vWRt0V z3~Y8*6cYPiIVMrx7Jf`VM^9c!425U>-X^bq9ePF)BcLQbetUNwxYv*@J1%$7E2b4} zH*34$0=gQ}F!yC`&4aXL(YA&@{4z<~y2XRFS<{dU(58zPDS_Drt{)W{)yoAPWvVl^ z%@5^mu!zh;SEg`vDl}s?I)B8x&)bTS)ABWxDj9ybo+YGkj<0*6n^{kvCXx~ljRyD^ zrx;UV-!*CL4QIJrsLiejcNQ&ohsSMbCo=+ccQ1q_eQ)sBUGfpgR#pu zqAPNwkb1iU;5FVJ6Fl;Pj;@zbPf#t<&Jg>Mj|NXA0a3>TcSYdUNvHFRvRw%%ySVW+ z(+@==L-jMPyZ^2vD=qkAOmsZ*1|ASj355sUprCZs4astaI&ufwio~&qzY4ZCZE*vG zKlcubn(@5Adv9p20XoKr=R z%?u+I6~2a)TJZ+E+or1P_Si)-hQW{R#Osd4>4lBnhCh#7*wmf)4X92DFN|DhZDDuw z)L6(&{l|&BuUZ&E9d{LYrHrv9q3qNEhHi8SnCI!!r= ze^(re6q0Qhm`awqBHHR4Ahf%>VWAp`@0+F4nu>Mes@*F;;I&I5Mst{dNJo|T#8 z?wFho2gi4t@ytaK_!O%^JIwvKKAub$EiZ|#HPfc4q5+rD^Ibb zbx~%c!IXGI*h&!Z<&>7wm(CA`n6Z8;dFud9s&ES}p1RHt)JaZ)wY!aCq5hKp6)Ubj z-_>-T-)1*(d5CkEOV|tigkUdRv8ZBijxh|u&7Q)0N2I#DI#Nx{{VGbq3bZIEO@BJN zbu(UcOJFN8=1&)XRdDgB_Xy!7z2X4L{Ym->2@Vo3JH;z$mkGH(j5EvL_m`$qz&9t> zi&FWmH*|2t5q>K}tb?!!4O1Id{wm*Yxpq`_W#|I!ng`sPlc8rXDijuwNT+s@5vrgsfeB?0@`{D{7*70L2U9rX!C6JV0?ay!1h=%A8?weP6mW zlw#)dW^w-$inn|%5i52tOc@V@2Dlrhf>mQQlT_o7rOhN{vcB4U9^3rGu11Sz2_9Zf_8A%fIMNkBnCz#vr! zp#|xX&_X@&^Zzf-#ko9JGqcvbYi7+}v*+DUn|lEZ-52zW{+x+)chI!o*UBpT*)dEi z_n>~h#v0UQ-039niH?u158@K~Qb2xj<*S`^)j#z?jE<&ik-(+g4L0kCmPaI`Zd3nc ziyZEz9oU`5F5fgnUSaP$xwD3b#SMNay8~j4LPb=-wKF=GoBO2{eWyaE%_Ajt<@(d; zG~kFFT?NG``&)QhDHZ>fqpuhg6H#FM?J%cHmNO*bIH^w%U(-QP^E#^mC->Q7D~j#&t%NOpW%d+iUsZbxE*1o)U^9CfZ{E#dKQ%rArO zrd*`tPOMd;_-)92(G&joQ} z8Kkd0{rpiu{D7UDLTB38RMuk16Vt0*>t-$UbjjGB%I%1WE6M1-YKF_$Wn2dZtN)Lq zc-bMZsk#RIHs7Wr#4$tPR)=YC-};lyna6SolGLYEX6K=`&wN#Xt8_-DLHg4lws42C zUN)wwW#JCz?quJ3bd5TAR4nvU-~FXm439NTPaR;Id^EP&J>HEv+fzJD5$x$WmLuP@ zr4#E_7Ihh;8g=^$=CJ+NlTb}No!h(vkc2G^@-;1t(3p{UxM@1{0=x?Dy@Js$T2Q_c z{zRmxh{dH4y)q=$aMa-Wh7U%;k?FR&=Uez<{MJ6R#^3~T@CSGKTXn0N2Ho!t^8v*c9-lcO}ax?R;&rsr&#Oc zyT2ZteRaBn%{OHGaFIPsEd5b`WNDSLZBg*`g2h5nMRnIAq%7gc3gkFwE1M-taA4a@^$L3GbdNATdfZ-D?XB4bT>A8EqY)5e^zom zQwf3SD_D^b&~z7e2E!=vu7trONCb4O5 zPheVT?a>zY>`7k2CB;9Ma6>Mqi%oB8juIlAO<%Rc)@jtXjTe6oY~K{SpQ` zwe*Wpxt<0yIHJ0zC#(LAdDYr7e5_S{(!5!fOQa6?y-tv?O~NJ&V7u}bm@`(S722vM zFLd{@Jb68K=nZhs85tI@hSDjTE^L|hgN(dX?L%DZp|vOpq&P04_M_-FvpsZaP^Gy* zT*4=%0g7&>NDC78$%p!L=vDbGe>0Sn100}?p5&49 zXT<+TW}HgU6m{3`R&lw{zSsrs1$g!P$UUSnEEQ-~U-~@*^VesSut8)4Og|NBRfq8f ziDGV}MeJSqCJU027&+jg_!5*KLBk+DLu!zgo-}WGRTBP16mYoF@M(=_;lbPd@!)(K z#;&ZNSWFx^+Lv%zjG0~zhVD$D?kZloX+&(N@6)lWB4DoVACLR^pE+B76T`q5u&lbL z@u%lWhJ9y)8&C?^P2$g7$N?(~E^ZHr@uhutoq&y<{U9$V-$^0O=kdan1XytFa{3Y) zRADqU->I*NZ$bvb!^fb$nmKKBiO_d0_l@-(&3Pz*NP&7Py&@-@6pWD^MEg2-UADbChWQEEJf8*);&~NPc=j3gdoA zb8~v{M#qP%JuhcUM=0zLMG^IUd=d<&zKY`r2#5=*?b1y0GL;xVkzEs`8QU}JzKcKS zRXkjSkCYjG$9T$%9{}0=bE-Y%5Y%H>Y%yIBnu|Om?9z7L(ivG9t(-8xDd`g9Mm6rAhl3MPp@gZ z_j`ID&%sh6#GpHqz#R^PuxWBV?Qm_bJ--mc63AL78k~OQ5m>6gJ~{}Euf@zdMz@w6 zW<>7+;!M}^4eMpDu7T%i?sfeNREepL6nT$+UPD|gu=;w}K`8v+s=2T)t7OY^0Sf4| zrjAzGdhIAd^VKO+hmbhYWbMF@nXG_&)6QDBEFW4uKQspF!TI{#xUxitSG1mVO=Cy) z%gvjEm*S@^)GB`EuUzdS768M-p9gFdl@cpat^GdB)c}JixA!;G&LVSPG9r!v=(_XR z$v)0@!yrRIhfL*VHnz;x>&G`x0QhTN&^3r(56AP!#kV6qqOhz2bf*Hgez?~H9Fo?@`{=a+aP$So^jJOe?7%5rpG8SD z9#d=bW5oWh1kWud`Z1$CfVg&)%+C{K6@Sq>y{`9k1jWPo2D~fZ9m#&B(FAC7Kb(d| zI4&>*A1N;UfX+u0dPN3G_W!-(1d6WwbukJ)$*8^=>$Y1QP0;7iW2p3OK2e}q8ZZsh zcfA>#%KqX)8QP>bO5i=*ctaC<3w%;d+HS#uF9=bRhZ+W`+COT15-=Wb5MhYw@kn1F*#USzu}&B z?CT%X&6h?f#VrR|nR+BXmB=au#0^@7gm$(*1%|OV|EUoSx)0;_ZOFsaVEEJEm!*(d z{FE1)0%GWCN<{g_=Pcehc$)2andzB&&Mke8sC^45;ub0SO<||#k*$1_n2CnPkwO!o<2JKH+v$gEw3zo(Q3&Tmub&~6TWwSu59CeZbF3gAX1{&5E&UR0 z3EUMst5(2aQC3Mynh@e5>qh4H8Nfq%s~(_)24yLw4GDR*0dy1J>631l?zhv_`Cizf z5s7mL^2WHrf{L1(97%e&_1A6DjTQkrS49H7G$7vlgjViY#w4M$%uO{Fdm|CT}ggsP8lXZ zRdQ8UjZ?mjttEmw!xS4a5Hk3gS_T)trHTxdx0UmlYrn=OsSMLeC|2|EJ9z7f1gi_$}6?iInmxQyK!!JfkbDz<_)U{ zbTgV94}(_~L~A|h?|hK_I{sdf0_OA^#$WF7?wUOgYi<=8jig1z;RC(3h5B*l2l-^IX{+5xU0P{NlHlQ+qmyOz_aeUTtKZYNY-5`L-QVxKg6dj7d$MeGu9G;V;!t}gnRo2f1ydr~ zTOP*mKiT?3Upv-PttobwOe2qDze&}hwI6M#JsZj1oX4)r9)GO`Z^WIUsebv*Z84wy zus6k53&Ur+zP}|to@P3iX&=s*BS^D8W->`FTgaN1o|Iece8?jo znh>c}9v##hGu{&Y{wN=6y$$}x`V--WAQ@0?DbPF?eMSNK-Z9=inbMAK$ohR|jr3Pt zi>6EGqkfCq@t8ihy?RO{M}PwCWG87c9r1ryhX`doLc?N_N@cjvEgVCJ0Y~CyT<6{A z@0c!WQhTbUMzOYT=55x~3{|!E6mo9+p1o0xQTz`Cc-hgkles9c)U%#UY_Oy#JSAoX zW!uhaOfiqtb{4P>k#ws4X&ds4KLWw`WPf#VgugCZw3ihieY z^Y7ggopKOinJOeVxbtjjbce>9G7qgw9;77>?M%s49eHFIi;YFmNX8#?@*ae)>Ej%-Fy%6Pwap8d#d~RyF!*GkBN}Abvu-oVx=)dsx^Ju zr|W+&$NrmXCLm{{kCo(+&+;QSr;Td{9dQJ&2B63I;Z`$U3Dv-*FUSkE!5flS)qm(s zkQ{wwI5Kh#>}X+O@j_KUrZ{2YL_$IVFe%B494!}3-7SU6)~xVpj}8=*@o1T=DXAMt z{Q6+M{?|3L8*?FG@;(LQvO@IW|zs0(?h zZ?R6>(@&ycf^oAw<~BCzxZZ53zuCuNXPGMW*{G z)Mva2Bpkg7_nDrZsDQg=9v?2!Pm^%$`E~tC)Feb!h}X_ztf>&_tG}Nkx2vlAB#M(G zG`pq)V5zBZejo}t*>?3KUJg4-$vJUi!YMc%2s>xMZ2h6*<^HIvG9EVIQbSynSh)Wr zs3D$voi%!pXZhx3W1(LEVsKrQJ;esy#*?fC!b+n%ugq4PLmHsZ)+H{wDTI>+`WSdI3 zP!SQDIISefo@Bg=h-v$p#{N7Sh#@{~K`1YdS^Y|YT(YDV6^L?dMe+6fNr;^B-O0YP z57`uus}W9hzn~xFVrCe(Z&_}o zYd=3um(jM2!e+5$MX6~TS_SLPD605}mbo4Y+wpMzQ8c_30SN8V46vZjYQFKF$nB32 zjm&r4jCMUk1S3=>;W5TxnB<2YxtLO@hc4pq%#!&9%J^4oAP}#Blq&tDrHA?EAKBRcP@jP&em2{X8G~m9jnR%EB_elDtvu z=Ip>=`5%j@Xg+@lFLWb~U4)GAYL(?4w8fHa)YK+vr z6>m}&A|<=UallVAcr-ws4ba_wgNb2)2>g#$q6o!0ekop&Ui^k(n)n>7$}z+6HT*PPKy?!v$H|8|vcaT8b&q zO^=*_QSPlrLK(iK7iYOK<^NGy3{b^akb$+Q&fj&;Gqfw@t}=NCWR~1wso%(!wux5CNN2LiaAj$|b(6=V|43 zuGsExk&hip*NLgIHK)M#brk}~a`Eli-*VW*C>2!Q&U%zeQ0lKx_UrF2hWnDTi!Ea| zTHj0hogPzg^-AlBl_2Q7=QeSN-Hs|5O%OWqebMDBcX0S^^B3Qc2@ zDe0^`!l~z#e*8I`IY{!2F8Mb-pIxuqU}_|J9_H_aWtCFbW$tTj8S#?Sm*Rgv>zuN~ z&#}Gxd_J%!HicH4Ty{k@`<4+U6Na$;My0{p z!J&NlCjOi(C(RRM!Z_93|u72NfdzF?7)#E?*YeCb&9pO|{ajFKt#A$ZJ^;+7C_w3ffkZ04W2 zvBJ>hYZ3kwQ}z{@F0FE=;74H7y7A@1M5xRY(Mm-GGed3;P8l;e){SbIt>>`D>8Lb( z{sb3HSZejVtLtjD#ysPZqipu2V+mbQGLwFf3GBAvrB{=edzzqfxlf#X0ei~ z%K;%h;?*0reCje=KM03vMMq0cil};OU!MyR5WTQC$#H^(|0Z@VIAPySsYKN9?DF&{ z=e7q>4NK~Wi>2=7vp6PbCRt2f`^vOuvYhPAnI|npi2pS;&>MoWlzFz3wda(upJ64% zM=Z_A+0V5SOK`G*U)+^AbR}exi>ZOfoCn0H8v5NUcp@r!% zen@|#E{i;EiJ%5zq6G{*4v{R-1b%7C=Qb}E_5=&>ncXSqPbRiNinLB|_-(zhC%jwG z%$zZpxT3FGDy=`p725sR%N>$+MDLY?y1vka-LT!d7hd_NaRw|#(k1@Q(f->QkoXsD zCsV6A5|d2wXon>Ec>*EAN`kZ9ZbIl`j=AGmN0}llpO_npftnGIafhk#4NTEe^e-)x zjFYu0PLle8AbM^NT=%S}a8I}+s&2`ITxT91V{>1ho5eW^>SoK#ZqzL*<3W`-8V~Bh z11~<3`DvK=5AyqZ9O^%}qRT$Xax)#1ZZ|u`Aggtbr8@BrGx#-|@H9t$HfX&yH8goz zqFvxBZ(<1u>?27Bh~;LTozNB6W-sthjN`}e1%Pbj$jT#e7&-7S+O%{`gG=Z9ZkQ$2 zYk#ZpVeZv$_Oq(J;q-!uChee&Z9ZGAF`m}|;{zU7EPL&Hx6@l5ID%x=Q&PpS)SS)kSQ^~bs0V87PxOn zJcr*k*&^+n7J}Z#M(#mF*=5B9-W)E`XRsSsoa9TKiy)5st!CDwMm&rQIMRp=e(_1q z&`rLG{Io|bkB8Ni&r*y`9Ugt}l?92Bcs%jXTuf#Ra)~%EDC2nw5dY&XP|6lU>Wn%n z>jrO?(zkr2Hij*FRJ>BwRc%k>uH~W9!6b5V*0a{!jUQeT_XNpy09KX~gs-6uC$wYS zFENSH_nDO0NFBWX(1SYhuTEIB`x_VWA4($H#HUwIeN}|MV{hmpOJl>cTwc7Z)BTV1 zEMl>@RP7}JJQK|HjHY=WuzKil`wo{E*A$j7kXCiQOb5STNeb`0CSyjgwLSG{+)*r@ zjFu=|BO7A=<25NAE~FVDDPs3+=@mdX??!LY{?oq8o~L+U*ezO{|%zzRrt7xK z6eS~Y@abps9#UaGNbSFe@Rf=VZimfbiUSZVsLerm^-2?W0hGteAI6}KeCf?3ggSg4 z(E0Kh`_633o?8wd{iyD*`JVzZo$>m=K8d`UjN6*Ri!MP`RR`qH@F@yz+k)JPx?)cQ5?^U65km?@TF>{(FT-pgTT~sD_G$ vkVB}UhM~5fsY9(p%|i|1LmflNpYcDF{vNVG_89sp6;zhjY_Hasc*Xr6oUKvw diff --git a/textures/base/pack/ad_label7.png b/textures/base/pack/ad_label7.png deleted file mode 100644 index 3796fd3887414f41b7e9310fd6217da835b4e308..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21230 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

8a* zk9AijExD&*Cz2dYPxsbaE+4nv8u0_(<)VGT`Q+PPJLqADedIbETd-{Q@*nJH6yt3AEp#5CWUpgyP%2%R^g{`e6c?#Xw^YJY01V6435 zA9xSEv)7ed{XlW)VQ5Uq$X@d;DeXRGifhkdCYk&M^jKS78MCmekoXE&+(Ak+_)_)A zy{!K1@k$=j@`?J29TUo@F@HTDrQn)cu_uXDFf1G;VAsxnr8)c$ZgD>h8;nyuF>t`q z-M|U!j!?krv3>3XZRr4 z$fEfy12uX?YS3Yq?w!kGMshV~>0GJ49qg{1w|`HtRtU^qrP~dHC(K_mv`&gKJfklP z`5uV-DWG@eQ!Z1;SpgKGWSgz7hRa+={4Mbjcct(#?&vcfiFQ6abddX2bLm$MR#K2P zawA7&WLe=)+xR~ziM{;>T6h^zOy>qsr5R(KVc@&8Sqf+$CE`gpi#N##4Pgg3Hywk9 zOX4P)A1QRzfj3mcak?-LPxw$jCJws8M2W0#flIV%lACP$zqlm=cQ30hl1hd~zKQBD zWJz|O-ke&GB|KI*5a%kU7}$WTyT-{|GyMq(IrL-~1K-q?iS7-| z)eyaG38q^Te`UfYG9gX5Se&AVAmgA$t=Vk4S?zP$Z#?lkH7QsRHm2=Tef_VLwb+Oc z?sQk+d2k48x~%~qt%x?B&Q&{EWD6bS{@?@}4&i*~5=rzaDWMp_V^pHEai}|Ph3%i( zP@J-%l&kw516qmz$uLKMehZ z!#`@B8+tf>9D=wb{V^t}jSbTO-feD3fBij{zzopvq1G;>8>nuI^dcHC4M>D2gFzM- z227a@&bN?6sZ7oo|5SVLMavyCV*~z8iZ>jjw7I00*eT>6eCh8UP4wJ`^c8-4RX%ab za=G#0Eaxr6bA|lWu}rwd`2D(i-q!U5y$Ymrn8BfXdWfM8ZD@gPt})<^s35L_^oDZ+ zXApf%3=FSJRG4XWm_aMbfBL8v*E|DD@!a0>eo-}%rt?Di`i3ZjvJO=C79r%@Mk%n) zKHbn$>aJM4j|#OG^-^Y-g(+m00qNVEyA~o?ePi;1|pvf%fO*$VDPyW zEUl}aK=5&(uuG7|cO^P^{=th;Ns!vy8SYvi(}{qd7ydz;BMZV!v+ z=cn}c-PZkb5IUtEiH7xzB+EY68_KopY!iH$BMc_jP-|#ckJ){*L9Eeq&VhmPwc^M> zdq0u5rCTGtFvXU-%Mkt_Vi4)u@^uScG3vG)43&r6la~MD!)#gm%KMaBPYEaiVtrDQ ztOp2v>197A_%ibrH-a?Q?2r1-S3}2@bZaXG+}I=0=TtAdN-YdU0Gg}gpyZ{EcU#2bi%{_l1)O2+>gs({I4}r5=HNiASrGVE)FY4DL%Vps38Cfy;Y!PHF zj|m|yQ$Q;eqaHPu)7r)KlU(CFc~p)U#|N6^Qj!yku!>ZD?v7_LcP)vnSM>Y zK0@ldqL|M!{&Te$s_~89T|+7x_UKfA+I`7&PO^p7rUKs_=ye4-z?p0Kbq32PwkS$e z-r0~v>4~SYBlq8cT&u|y%v4E^YtQK&(|6BEI zC%(F<>zD2zNMir;NgY8JQ8id_B3xc7_IF?*D%JE|8mijaWSTEpy7@5+*F}_QV<#Ca zahNjk^$priBpk{Xe{KZ$N9aipNknD19@+kgOVc5BZPC&~?=sAkI}8%Nx%96Uc!K=k zc`O*F_n^Nt<9{p3zxe&lod3H=cgS|gT=%x>D)qoD(KuPiOVilP2JU4Gw)U_kzDRCM zO38{#Du_!-8cIomrKP~qcZeJgu%x6}K#2MO*TC7;#{Rkg|K31MxcyHLf`58&f?L@- yk@RQxH}u!^mk)&YWBP0P2EzIq`1-N^IO5k@emWZhO%?Hf5~!x$-BJz9@c###Yi(Qr diff --git a/textures/base/pack/camera_btn.png b/textures/base/pack/camera_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..5e305546e6347e2d28f01175b1c87be2e4922ec5 GIT binary patch literal 729 zcmV;~0w(>5P)WNZ$SZRYCyv3{(8B=W!QVYyLZ)Vdw#I6F!RmKIdf*_%v{MZ48t%C!!QiPFbu;e zFTB<22-qa4O;VGjMoHTxZS{-iB~443k~A*qgXeh*>)yM-PM`}I0v3qRAK*1`1E^b% zhMxeQ0$Gxi1)c!MQ@;d&R!R3IwL3*QNna!lOB$6lCh5DRS--qi(k@BOl3FF5_W!%% z8Tmc@PzCr8a&GFzn1i58y>;4*4Nm zm#6G@o}GUNXj&%vdYvd50yeL-@s+@3G_vT_OConm{@LBfph+{`^R9| z5-Qc2e;nxSCvYr=?iK)WF`~{$NDgo_M*D5RbU^cHr5td@3DK6Ax{to*ZiHiJLLBfu zW*sGBWPw<=4Z7}Bu>5^jR; z5;$Na6`NqfW3V%U13FT33?@i~GQj5|j2{IusY!$qrosmz&iZ^z1N&2#3YXwAG#v5-(z85IKiJ` zT2~?tRAav2>yLZ63=9o>8gd_BN_YKk0Mfzuc!8#hW;Q=Dpw#;M)_v zO$n&r7vr1W{h=i-K;{W<4SrXLvlT8tc8qiY(_}|Rk$RwF_5!vfYd!{s3;YXMllC$L z8R7}9E++!rn+q$z;_M0BoxKY?H0D1puRaXa{FhNqR8aeY`F^0lOozW$<+Mb6Mw<&;$TRxPsjP delta 452 zcmaFLyo_Z+PW@6(7srr_xTG7l2NDV_60R^V=94Hru!@nX`80&Nf|=pXxsALG3LFdv zH{Lv{sk?QdGxN#6O!Xgk?qgtJXebRew?4}VWVsY>29gXPS3Cm=FFE^8<}w4rp#TBX z_SPr|Zn0O>_$HX}=+yr@Ik&Mo(s!ZwLuR15dWU(_ZnRc_^j|oxculbm$Y5|WJ+kN% zi1EPu{+rtyc^eFPTn{dsF)cSRBd7IHEBA&S;jTp=^BZM)%Z_{pY4w(Dka(~3j|<4` zNCRoa2C`i0Ys7#O3)(wAW&-I3hdUD%)yoFd6iBcDxf~}p8&4H{JvYDdhbfSI;OISB zDF%+i4h(l%|F*MSS-gmA%h{uDe@?DA|N3Z#Bg=<7@7aLLRtUy|9N<_2;;?MA1Cj|x z3WHkDu>)BbZtyTL6vPN05$6{Xs!Kl)vSx*|dr}=MkTK`*D+Wge+Z(*Bt221YoEsGc yc;wi7tiUml;J~yylSg90fdvHzRxrEC8oUCAWO$yLOKmvFZ492SelF{r5}E*bi<*M~ diff --git a/textures/base/pack/inventory_btn.png b/textures/base/pack/inventory_btn.png index 4d21157fd06cac6db974521b78674df780b54d7c..250f978e5ebe0adc7d20b0478a7da45d74228924 100644 GIT binary patch delta 338 zcmcc4yqS4IR=tU*i(^Q|t+#hC@-`U=uqA{Qu!bkFf=DQ`%ypW~&8V_6f%E?Vs@C6e z4`;<(<|&G|JiDENfgy*_;_FHFJZ<&wCuIruaX>~eY$yY=UNIkG^)Wv0$d4Pr!sjGz8!cYTLBbE zxWc%YFMx?DrQ11^XM!x#rs@Jqu$V+CL&IH54Mql*CXJ|bI%S)hM0M1e^*UB4R7XDi z|C-_Rtraq#-g$LIFaW`gootM+RNv<{ND6WTx%CX3tS4r(e0cMp5y+b`Ev=#L`d@#L zLaXYs93}=1=fDDu<)zWuick{Sw4dfoAXQKxQ}+2i$bc1m)BiIA z=_$cLVlPw@nR2jXWnc*K1FD56$w!uivcYO*e68jO@*|wf8BVcs8E|IBt!m0s`^Cz| z{0gf0wxl{u_o76!-C12)hJ3r>vUVE)|e(kmQ*&|=E zgihsB0RZ%6OQk6Qz&L~fjNoMtJFWmP9`faB33%1(^=`NOwQFX`2TO6vic|nf4i3Zs zKpI&l6{VGCzdU5wO5igI1C`8$GsPIRJCpL{JpbY2PZL!U7w#xFD>rg7iZ%%ULf@`x zR*79fpHX6-Hx9tLuR<@{C-P2>9_%c0k>kt$rrrN$xTlvraeK&lOvYgJ&2HkCjNNt4 z9}l^<+tsbj-R15Y{@&%Ka9^&>^W&A5ldGTwQ&kzH3fIv3MvLXW2oFc)JRw-`gg{`gCJb)i=EHf%&?z}LE+dHv|?q2-+4%Ja%;&G}He-4+W$=aZ!2mO6P?yBAJOW| z-4iPtn%(i{>^DHO+Q`+UAA$|FMS4YZrL`wu0eghkDIhoKVrwG$MR_?4uIHD`jE~YG zc6O2T82eE}WkyXvznEbV%V~NX*LFpH!4D-_EfHyqjeN2Y$G0sJW1yaIh>R(6zG9zd zvJgK_E(QfkcwhbqkGp^0B8cE@BDq^=GHm;EpCtR#;F$Nxx z6?=oP?n|PR7w5GYxq<`?It^tI0M>tRVveAmrFg+Lr<+C?zKM|+| zvx!}F!-b+Z+3{+KhUI>EvEBaUZ6w|)0m4B6N$`Jg(tLofRDE{`*VOJC&%iiR1v!Vj z>B`SX{nhUDS77{ciF=m?jQ_RXee=(NOmMEtWT2|AUYaijs?92N2o(U8cOPI7F~=+} zFgI=nQ`>%moc>(0X>Uq2+Tl5}Xrbfg%dDe=j*g*s>a%*=+PKL;pYC3rqjUJd&L8Ck zNk5Eb&+ops-|^$)2d>H8lFP#lj;^t_@vh^y&bGXHfZu}k=HKo)E{(4>yB>XMe!J`X z#C3jRPNe+f2(O}A6k#DO%^*JG!;;3HTqS;!Y9Xp9QowhDt3n;mb5A9-vtDP0OZVY4 zJBWOq8T<63g*}aoOfo!GBwH#?PU)1#HtVdGK928>-%ZWBK1+lYk6@9&^N)<$mH(5j zSt8AC;a)w}dA`${a=zp7r$P=wO@`Piz0MS9(GiFJ$uK zv7$wXIaN6ZUn8NZ>WV9@uxZ{yY+!$Uuvc#@RABOKQ;T4h;(#!OAXl;*1x#vxNNG6b z=^EKN&M!i!k`Rjd2N5D9dD_F9`)4eqH+Yv!n2ZnqzWcj#y|Ug0&NANBdC zvLqv>Lq)8+g+h$CxT7@&CKn7-Ndy|V%^;DmXbCAsz=~V$mF{daw8B)1y)Gg-G+zCZRme(B476E6*zcs732(l{}+W?UhZU9S&EIoVc*D;~IS+a|%tVO(# z3+*!SQ`D{TxSe6VITLI`vhZZ}8j`xA?AePXPOhexc|08|wx23UMsk$f-re^isHv1S zOeXM6vc25JmbX`Y;+Q3DB(+?s2MIyD7bgGUnALXN>-`e+mzi?d+o7_P->v*+;zbzH zynZqC52@IBE?%ZJsU#j1Z?7)r-JQ6V(&x5&l~T_RzWurS!~X}CC9IHkh?ScE0zakt AwEzGB literal 0 HcmV?d00001 diff --git a/textures/base/pack/minimap_mask_square.png b/textures/base/pack/minimap_mask_square.png new file mode 100644 index 0000000000000000000000000000000000000000..b270e0bba710854e23ff0b154ef9b5ee6ecaea2d GIT binary patch literal 396 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7?_xWRHv9tCXnI@@Ck7R(i0|3_zwo>^?x4& z@|jD5{DOh>ud*Ze7#J9JJY5_^D(1XBXUNE)$iuSX5s&cP`s0#6eoLm@nWW({cZ1Lk z*{v)rELq>nlj|568|N|62mCxBFnGWV4WQ2>m)LqIoY81bGy(-LgQu&X%Q~loCII?y BJJ0|C literal 0 HcmV?d00001 diff --git a/textures/base/pack/minimap_overlay_round.png b/textures/base/pack/minimap_overlay_round.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0f9a6d23b1ff3399e9704b9b452c24ab123221 GIT binary patch literal 13105 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 literal 0 HcmV?d00001 diff --git a/textures/base/pack/no_screenshot.png b/textures/base/pack/no_screenshot.png index 90897d5986d5a9a7801083ffb9b03ab0d1b0448d..6378b02ea610503ca13e0fa4bc348adc33cd02a0 100644 GIT binary patch delta 15 XcmazKnxM)4|NsBxN2E_ov{eECJ*fw+ delta 28 icmWHFpP(tiz`(G)%JvqJVk`;r3ubV5b|Y<~ff4|2n+RqA diff --git a/textures/base/pack/player_marker.png b/textures/base/pack/player_marker.png new file mode 100644 index 0000000000000000000000000000000000000000..fc0ee739e5d5c1971cb3f98d2d407cbd6df61a8b GIT binary patch literal 2178 zcmchYiC0rs9>-tuvH%GIil8jPNTIa|Rs;qjXCPYkZ3=|txDk~_Ij5o(lsZLYDwbA( z6sxi-gcgA)Qe_R&#tH~n#|R>n2qZ`Z*+%vx1@7ECays)D^n334-Ov60?(g^R&3WhL zn@>Z0_4Um4Fbvc8_wx$FFd{@Erh~)jVVO-kTwMG#i0ciP0FFOZS@|adxqOXZzeX@N zhT`}*icnKi?`AMF17>H}czzzi!U7sli;HMLEiL^oYBY%7zFpe`%i(4i;ZE3RdKzV4 zy#gu~P%2S`J%@*ZS`FYa6bh6Y9Yx203=0Pa&=Lwdb91Qe$Ovi$0oKAZYqe_t%imoA zwuL-2g!;qB!RGKT{r#v_R~J}b27P_t#S75gjQ~2&pM&0B1kiyzIJgE?Rmg;Wo;^bV z@734{ZrlL1wV!73rR8%0Rxf!LP-_U?=1i82vW#Kjm zrKO;!2kkE_16f%J;3z6WoShAllE9@)ATtxOP>2}%xw&BXZs6w!Qc}RtqaZF0#KeFD z2f)FDAT}1n$AkU**PM60rzi080zN)q-#(P$@j!4eNKXgQ=WtNU!vlQs2?z@VTrO~S z25xSE%|@n;4RCS-uCBn`99UWcD=XmWh~6av0T77*#{roPC=@`Y0$p7|qX9Y{Fc`qd z2&`WZHf#W9W^08^CaSfyQ41fckk8I*4EY4OPZRbEiJ83 zZ5(2MO%zUfsw=T58XwsI_ znnk8X+V^b{35pLU^|?eEHns7YO|0^a0D(ZYi?!aKr(y3WD(%0qR;Mn0nSH)KFD3p4 z+kK0`ScemxHfzdXt;XiR#)~~IG2D=(70b(Y-7$(`+CSA_$XqZYM}BHijeS>%^RR5$ z8;fgGNsfph*K1d}g^n?o~d&7jEMGe!<1>sl~7V%?_ zp!xOAfb&_=6dp+@i+%m$zz{oHNZZ(vW*rv6dF9Z@(aap*@#0?;f45dGx;OnG z-OfKt#m?DEJBV>4RzATEtHFn#)auHFgc%=)lJ_x(V`KK+rTwI1ah&T%LR@#GZ6iuO z6Ze$`Z@sd&y)Nhl^~3}wCGxx_UBp0r;lx))SoRfDVW^yXVk1$JO_1*5J^bF#z?vd; zGNfUq#L>&5W%e0k;w`*C?U4y~X*MbS&13zVI(X?74@&HmBGui{d7S^UqH|LXGlS92 z%#ojKAa3(JN)_Rv9*Ppv$v-Jf;baz9Gc$13gJCP|mi}FvV_%T?Wgl|tqjn}zq@;Ge z17Rmv0lX!)kju=E|yIF!}!NL zx=OR^psKBB@`{R*ZePtKH^dk{a$;Tn#iqAVk`zLKbarv!} zI%+Kg3oXpdE+4)-@_V8kbMeCV%{y}C=vOP!w%(cEGW(R?J&}C+P_m$7wphA5{3G|t z!legp*ksChOo;s6X`kG|aIS}pVpbY8?e8@7^mrCtXhmqi7cVwPb8Vw~#hyvumqeZ+ z-z3wG9FMy%^=9G`-lmKsfgk_v?fSu=>s9#^J-tV~N(iB)-4>MIY<%eKpxmS7;vG7F zwUSZlx=(Uu>NjPJ&$yF8s-*2)g6ql5Ipu^{w2j|?YHZk{pm%FtV(fTRs4L?KOShW% zR9}}Eid0uIaANZOcVC^RCIXR%1@%I3zGvgL^&3CLcwMJY&CETk`^;e(5ACiB_baaN z3s6W29A5eJ#49p;uBbe*HJ!khIR~#87*Mb$5m&=;{_Dq`Hwhe?mn!tE%sRBg0`oM| zTbbFSy#K~vchv`HwGVNi%8!})zi&%RNHqG}{|m+N7ccCUfRWG9GyT0oysCEb1pfhx CW=lW- literal 0 HcmV?d00001 diff --git a/textures/base/pack/rangeview_btn.png b/textures/base/pack/rangeview_btn.png index 692bc964a6aa4086dda654cb63f5a5e5b592469a..23750a4c00622c7c7e965a244bcf502482671921 100644 GIT binary patch delta 593 zcmcb}x`uT^TD_sCi(^Q|oVPb__Z~73Xibc|A(qi7c8N)M2`h-17`z-Q=c2`wPa^tV3@)%=bi|VzQQCEF9W1&Xz)FQ-E5e{4P?rm#D1y2}KH?WW&&7#JE1 z8P+CEjgHj$A6FE)IQ{pw?SYI83h0Wlrpva11tb`zW^eG_xBbq#s0lSd z;|$moZa2L6u&{HpuZK>5GEfg#HtAgx}u5$R6yg8f?=;HItD`MIufZ{cF z3eGPaHZ2Fm$5zJg2{umM7q2CP+?mWE=lEmGDNxvmJ&0@ZUoGPW6g6d>=FYF)|I8m` zs25{gV*o#pk;S-gnoqW$e_z!aVIa4Z!S3?p$bV delta 630 zcmZ3(dXaTPT78(Oi(^PdTvCB#f`NsM!K;Qq_8zMP6%7X-6dhQ>>?UjQih*HwaSjs$ zhqGgeczA(W_z5n)=S9mnG}wI9UEa+q`MKWaojn5(v|U?s2SkTxJ8fON@Z>e8AM-0g z{EoJ#E3#i#xyXSyd5!!z7^Kz)<)_^!Cx}39U!&Fax;`aSj~cnm-E}9erHCo`FL^Az@!bN(0B?e98K2 z4XZ8X73zT|2yL!0nrE0M&R%Ed(7?cWWWTM0z{!kb%b!l|*v!Dh!lB?d<;0g44h8Lx z=2(OH8iI~rMA;pe$WJ=>GQa6^>k}WKE~W^%zln)m|BnbTo?~Jzln0yix;RE9mq9?! zWglp|4t*r@zz3*oiz&P?757M9VwM|B_|H2#oNgP1NOpld9&=F>w&BW ztDJv)K)PcN|Lo6i!A2?S?0r@s>kCuh1(SMqAj@FYjChd9mc-Hq1%Vw7jfTCA+#(!I2M<^$ uTwz?yCsE2^_P{CmKm!}w9WWP|b{ICvp0YNr{l6WkkHOQ`&t;ucLK6U|f%0Mi diff --git a/util/buildbot/toolchain_mingw64.cmake b/util/buildbot/toolchain_mingw64.cmake index 52d06cdc..9a7ed82d 100644 --- a/util/buildbot/toolchain_mingw64.cmake +++ b/util/buildbot/toolchain_mingw64.cmake @@ -2,12 +2,12 @@ SET(CMAKE_SYSTEM_NAME Windows) # which compilers to use for C and C++ -SET(CMAKE_C_COMPILER x86_64-mingw32-gcc) -SET(CMAKE_CXX_COMPILER x86_64-mingw32-g++) -SET(CMAKE_RC_COMPILER x86_64-mingw32-windres) +SET(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) +SET(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) +SET(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres) # here is the target environment located -SET(CMAKE_FIND_ROOT_PATH /usr/x86_64-mingw32) +SET(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32) # adjust the default behaviour of the FIND_XXX() commands: # search headers and libraries in the target environment, search diff --git a/util/updatepo.sh b/util/updatepo.sh index 28755b1f..f4a401f2 100755 --- a/util/updatepo.sh +++ b/util/updatepo.sh @@ -50,10 +50,11 @@ cd .. potfile=po/minetest.pot xgettext --package-name=minetest \ --sort-by-file \ - --add-location \ + --add-location=file \ --keyword=N_ \ --keyword=wgettext \ --keyword=fgettext \ + --keyword=fgettext_ne \ --keyword=strgettext \ --keyword=wstrgettext \ --output $potfile \